- 主页 > 生活百科 > >
MySQL死锁分析:记一次因索引合并导致的MySQL死锁分析过程( 三 )
T2持有锁space id 3680 page no 30 T2等待锁space id 3680 page no 137最后回到了T2
可以推断space id 3680 page no 137应该被T1持有了,但是日志中没有显示出来 。
- 3680 page no 30这个锁是一个主键索引PRIMARY导致的,实际上我们没有用到我们的自增主键,是非聚集索引,所以这是先锁的非主键索引最后找到的主键去加锁 。
- 3680 page no 137这个锁就比较奇怪了,他锁在了idx_user_id这个索引,这个索引是加在userId上的,也就是T2他正在尝试锁所有这个用户的还款计划的记录!
如果是这样,问题就解释通了:
- T1: 锁了某行记录X(具体怎么锁的,从死锁日志中未能获取),然后准备去获取LN201907120655461690006528458116,SEQ=1的记录的锁 。
- T2: 锁了LN201907120655461690006528458116,SEQ=1的锁,而他想去锁所有userId=938467411690006528的记录,这里面肯定包含了记录X,所以他无法获得X的锁 。
- 这样就造成死锁了,因为X已经被T1持有了,而T1又在等T2释放LN201907120655461690006528458116,SEQ=1这个锁 。
至于为什么T2明明准备操作
LN201906130129401690006528175485,SEQ=2的记录,却之前持有了
LN201907120655461690006528458116,SEQ=1的锁,大概率不是因为之前的SQL真的操作
LN201907120655461690006528458116,SEQ=1的记录,也是因为他之前本想持有别的记录(从锁的详细信息上猜,可能是
LN2019061301294016900065281754的相关记录),但是因为这个idx_user_id的索引问题,顺带锁着了
LN201907120655461690006528458116,SEQ=1,因为都属于一个userId 。
所以从时间线上分析,顺序应该是:
- T1锁了某记录X
- T2锁了某记录Y(从hold this lock的日志细节中推断,是LN2019061301294016900065281754),然后准备锁LN201906130129401690006528175485,SEQ=2,这时候的这条SQL触发了idx_user_id,连带一起锁锁住了LN201907120655461690006528458116,SEQ=1并准备锁其它同用户记录
- T1 执行下一条sql,准备获取LN201907120655461690006528458116,SEQ=1的锁,发现被T2获取了,等待 。
- T2在锁其它记录的过程中发现了X,但是锁不住,发现X被T1持有 。而自己又持有了LN201907120655461690006528458116,SEQ=1这行记录的锁 。
- 这时候循环等待,死锁!
所以根源是为什么SQL会使用idx_user_id这个索引呢?知道的可以在评论区和我讨论
推荐阅读
-
【降雨】雷暴大风+降雨“组团”报到!今夜河南这些地区被雨水锁定
-
-
「牛科技」而裁掉外包合同工符合利益,特斯拉面临的窘境:工厂开业遥遥无期
-
唐纳德·特朗普|哈里斯:特朗普太无能,这无能是致命的!
-
-
【全球每日趣闻】英国死亡率是美国的两倍?专家表示英国或即将迎来峰值
-
央视将在无观众情况下进行,德国允许5月中旬重启足球联赛
-
我是一只喵|周深不识万茜,岳云鹏不识张钧甯,没必要上纲上线他们也委屈
-
光明日报|巴赫:东京奥运会延期,但奥运精神仍在抗疫中团结世界
-
【味精】味精到底做错了什么?吃了真的会变傻高血压吗?
-
超级演说游戏家|Letme高度评价sofm:他就是毫无争议的S10最强打野!
-
二胎|香港知名歌手叶晴晴怀二胎!出身内地名门望族,曾参加好声音
-
爱拍照的小楠同学|张钧甯漂亮端庄,真的好迷人,这气质真的没人能比
-
爱云资讯 | 全球流量大会倒计时30天,展区席位即将售罄!,GTC2020
-
玉满看到原相机的生图,才知女明星皮肤有多绝,张子枫拍照从不用美颜
-
娱乐八卦情报局|两个细节看出他跟马伊琍关系多好!,文章忙健身一年仍喊话不能停
-
-
-
顾廷烨|知否:明兰能嫁给顾廷烨 多亏盛紘挑女婿的眼光独到
-
美颜社|杨幂带火的“烟管靴”什么鬼?搭配大衣、裙子好看爆了!