MySQL死锁日志是什么意思呢?在MySQL中,死锁是指两个或多个事务在互相等待对方所持有的锁资源时,导致所有事务无法继续执行的情况。
当发生死锁的情况时,MySQL会自动记录死锁事件时的相关信息,包括死锁发生的时间、涉及的事务ID和锁信息等。这些信息被称为死锁日志。
死锁日志对于诊断和解决死锁问题非常有用。通过分析死锁日志,可以找到导致死锁的原因,进而对相关应用程序作出调整,以避免类似的死锁事件再次发生。
------------------------LATEST DETECTED DEADLOCK------------------------2019-09-01 15:06:18 0x7f7280c1a700*** (1) TRANSACTION:TRANSACTION 4496826212, ACTIVE 0 sec insertingmysql tables in use 1, locked 1LOCK WAIT 4 lock struct(s), heap size 1184, 3 row lock(s), undo log entries 2MySQL thread id 786597, OS thread handle 139760000173824, query id 132390812 localhost root updateinsert into test2 (id,cnt) values (1,1)*** (1) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 126069 page no 3 n bits 72 index `PRIMARY` of table `test`.`test2` trx id 4496826212 lock_mode X locks rec but not gap waitingRecord lock, heap no 3 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 8; hex 73757072656d7570; asc supremup;; 1: len 4; hex 80000001; asc ;;*** (2) TRANSACTION:TRANSACTION 4496826761, ACTIVE 0 sec insertingmysql tables in use 1, locked 14 lock struct(s), heap size 1184, 3 row lock(s), undo log entries 2MySQL thread id 786570, OS thread handle 139787712196864, query id 132390881 localhost root updateinsert into test2 (id,cnt) values(2,2)*** (2) HOLDS THE LOCK(S):RECORD LOCKS space id 126069 page no 3 n bits 72 index `PRIMARY` of table `test`.`test2` trx id 4496826761 lock mode S locks rec but not gapRecord lock, heap no 3 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 8; hex 73757072656d7570; asc supremup;; 1: len 4; hex 80000001; asc ;;*** (2) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 126069 page no 3 n bits 72 index `PRIMARY` of table `test`.`test2` trx id 4496826761 lock_mode X locks rec but not gap waitingRecord lock, heap no 3 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 8; hex 73757072656d7570; asc supremup;; 1: len 4; hex 80000001; asc ;;*** WE ROLL BACK TRANSACTIONS (2)
上面是一个典型的死锁日志的示例。通过分析该日志,可以看到有两个事务(TRANSACTION 4496826212和TRANSACTION 4496826761)在同时插入数据,并且都等待对方释放锁资源。由此导致死锁的发生。最后MySQL强行终止了其中一个事务,来解决死锁问题。