------------------------
LATEST DETECTED DEADLOCK
------------------------
2022-04-21 23:51:17 0x7f021e294700
*** (1) TRANSACTION:
TRANSACTION 559658087, ACTIVE 41 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1
MySQL thread id 3647802, OS thread handle 139647067092736, query id 1766483291 localhost root update
insert into t6(id,a) values(7,15)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000013; asc ;;
1: len 4; hex 80000005; asc ;;
*** (2) TRANSACTION:
TRANSACTION 559658453, ACTIVE 10 sec inserting
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1
MySQL thread id 3649318, OS thread handle 139647072683776, query id 1766485729 localhost root update
insert into t6(id,a) values(8,15)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658453 lock mode S locks gap before rec
Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000013; asc ;;
1: len 4; hex 80000005; asc ;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658453 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000013; asc ;;
1: len 4; hex 80000005; asc ;;
*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS
------------
---TRANSACTION 559658087, ACTIVE 180 sec
4 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 1
MySQL thread id 3647802, OS thread handle 139647067092736, query id 1766483291 localhost root cleaning up
TABLE LOCK table `okami`.`t6` trx id 559658087 lock mode IX
RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock mode S
RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock mode S locks gap before rec
Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000013; asc ;;
1: len 4; hex 80000005; asc ;;
Record lock, heap no 7 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 8000000f; asc ;;
1: len 4; hex 80000007; asc ;;
RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock_mode X locks gap before rec insert intention
Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 80000013; asc ;;
1: len 4; hex 80000005; asc ;;
------------
2、加锁日志分析
事务1执行的SQL:insert into t6(id,a) values(7,15)
事务1等待的锁: (插入意向锁)RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock_mode X locks gap before rec insert intention waiting
事务1持有的锁:
(共享锁)RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock mode S
(共享间隙锁)RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock mode S locks gap before rec
(插入意向锁)RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658087 lock_mode X locks gap before rec insert intention
事务2执行的SQL:insert into t6(id,a) values(8,15)
事务2持有的锁:(共享间隙锁)RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658453 lock mode S locks gap before rec
事务2等待的锁:(插入意向锁)RECORD LOCKS space id 5477 page no 4 n bits 80 index idx_a of table `okami`.`t6` trx id 559658453 lock_mode X locks gap before rec insert intention waiting
事务1等待插入意向锁, 因为事务2持有间隙锁,插入意向锁和间隙锁之间冲突。所以事务1需要等待事务2释放间隙锁
事务2等待插入意向锁,因为事务1持有间隙锁,所以需要等待事务1释放间隙锁
造成死锁