mysql 死锁记录
admin
2023-05-15 05:41:53
0

测试环境: mysql 5.7.18     RR隔离级别

mysql 死锁记录


创建表,插入部分测试数据

CREATE TABLE yhtest (
 a INT (11) NOT NULL AUTO_INCREMENT,
 b INT (11) DEFAULT NULL,
 c INT (11) DEFAULT NULL,
 PRIMARY KEY (a),
 unique key(b)
) ENGINE = INNODB ;

INSERT INTO yhtest VALUE (1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 4, 4),
(5, 5, 5),
(6, 6, 6),
(7, 7, 7),
(8, 8, 8),
(9, 9, 9),
(10, 10, 10),
(11, 11, 11) ;


操作:

事物1:begin;

事物2:begin;

事物1:delete from yhtest where a=2;    可以执行

事物2:delete from yhtest where a=3;    可以执行

事物1:delete from yhtest where a=4;     可以执行

事物2:delete from yhtest where a=5;    可以执行

事物1:insert into yhtest value(2,2,2);     锁等待,待事物2回滚后,可以执行

事物2: insert into yhtest value(3,3,3);    报出死锁,回滚,如下:

mysql 死锁记录


死锁日志:

------------------------
LATEST DETECTED DEADLOCK
------------------------
2017-10-27 19:38:00 0x7f4b67932700
*** (1) TRANSACTION:
TRANSACTION 3914, ACTIVE 117 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 6 lock struct(s), heap size 1136, 7 row lock(s), undo log entries 3
MySQL thread id 4, OS thread handle 139961837504256, query id 53 localhost root update
insert into yhtest value(2,2,2)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 31 page no 4 n bits 80 index b of table `test`.`yhtest` trx id 3914 lock mode S waiting
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 4; hex 80000003; asc     ;;
1: len 4; hex 80000003; asc     ;;

*** (2) TRANSACTION:
TRANSACTION 3919, ACTIVE 93 sec inserting
mysql tables in use 1, locked 1
6 lock struct(s), heap size 1136, 6 row lock(s), undo log entries 3
MySQL thread id 5, OS thread handle 139961836971776, query id 54 localhost root update
insert into yhtest value(3,3,3)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 31 page no 4 n bits 80 index b of table `test`.`yhtest` trx id 3919 lock_mode X locks rec but not gap
Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 4; hex 80000003; asc     ;;
1: len 4; hex 80000003; asc     ;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 31 page no 4 n bits 80 index b of table `test`.`yhtest` trx id 3919 lock mode S waiting
Record lock, heap no 5 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 4; hex 80000004; asc     ;;
1: len 4; hex 80000004; asc     ;;

*** WE ROLL BACK TRANSACTION (2)


通过innodb日志可以看出,

事物1执行  insert into yhtest value(2,2,2);  时,会等待b列索引b=3 上的S锁被添加,b=3 这一行因为被事物2执行了 delete from yhtest where a=3;  排他锁锁住, S锁等待正常。

事物2执行   insert into yhtest value(3,3,3); 时,可以看出其持有b=3 的X锁, 等待 b=4 上的S锁被添加,b=4 这一行 因为被事物1执行了delete from yhtest where a=4; 排他锁锁住,S锁等待, 这时候,事物1和事物2互相等待对方持有的锁资源,形成回环,死锁出现

这里事物1 插入(2,2,2) 和事物2插入(3,3,3) 因为b列的唯一键存在,需要进行唯一键校验,而由于在之前已经进行了该列删除,需要通过锁定下一列判断b=2 的唯一性,b=3的唯一性,而这两列的锁已经被对方持有,故出现死锁。

这种死锁情况,在RC隔离级别下同样会出现! 


相关内容

热门资讯

英国绿党领袖:部长们应该做正确... 据凤凰卫视报道,英国工党首相斯塔默仍然面临严峻的党内逼宫压力。当地媒体指,超过半数工党下院议员希望他...
全民围观某君半蹲合影:我们崇拜... 马斯克打卡点:半蹲的不是膝盖,是整个科技行业的想象力 ——当某君半蹲合影、库克排队等待,科技大佬们的...
深圳第二类医疗器械备案所需材料... 办理深圳第二类医疗器械经营备案,最耗时间的就是材料准备。很多企业因为资料漏项、盖章错误、扫描模糊、填...
直击杭州人形机器人展:文旅物流... 《科创板日报》5月15日讯(记者 王耐)2026年第二届杭州国际人形机器人展,有600家上下游企业参...
“前半生是恶霸,后半生是学霸”... 一个人的逆袭叫传奇。一群人的集体转行,叫世道变了。文|张雪莹出品|Vista天下知识局提到日本黑帮,...
若不想成7年来第五个被赶下台的... 【文/观察者网 张菁娟】“这是自2022年保守党前首相特拉斯上任仅数周便仓促辞职以来,英国政局最动荡...
产学研各界代表齐聚一堂,共议A... 封面新闻记者 易弋力 20支战队4小时巅峰对决;三位大咖三个不同视角解读“技术打法+产业路径+数据洞...
评论丨香蕉复仇、蓝莓出轨?警惕... AI技术降低了创作门槛,不等于降低了质量门槛和责任门槛;可以利用AI“手搓”短剧,但不应没下限地制造...
人工智能如何重塑电影行业?中国... 北京5月15日电 (记者 孙自法)人工智能生成内容(AIGC)正为众多行业带来深刻巨变,引发广泛关注...
济南隆超取得便捷式喷涂装置专利... 国家知识产权局信息显示,济南隆超石油机械锻造有限公司取得一项名为“一种便捷式喷涂装置”的专利,授权公...