死锁案例第三波
前面两篇文章介绍了利用调试MySQL源码的方式来调试锁相关的信息,这里利用这个工具来解决一个比较好解决的问题,线上的表字段较多,这里简单成为了一个表
CREATE TABLE `t3` ( |
sql语句如下
t1 |
我们先用之前debug的方式来看一下,这里两条语句分别加了哪些锁
第一条语句(通过唯一索引去更新记录)
update t3 set b = ‘’ where a = “1”;
整理一下,加了3个X锁,顺序分别是
序号 | 索引 | 锁类型 |
---|---|---|
1 | uk_a | X |
2 | PRIMARY | X |
3 | idx_b | X |
第二条语句
update t3 set b = ‘’ where b = “2”;
序号 | 索引 | 锁类型 |
---|---|---|
1 | idx_b | X |
2 | PRIMARY | X |
3 | idx_b | X |
两条语句从加锁顺序看起来就已经有构成死锁的条件了
手动是比较难模拟的,写个代码去跑一下
马上就出现了
------------------------ |
跟我们线上的死锁日志一模一样