程序死锁的问题,很难调试,看进程堆栈,看各个线程与锁的情况,对照代码进行排查。
数据库死锁的问题,更难,看不了数据库堆栈,也看不了数据库线程与锁,更难以对照代码排查。
前段时间,和一个朋友讨论了一个“疑似”数据库死锁的问题,最后进行试验与排查,找到了问题所在。
场景如下:

同一个表,高并发事务,事务内先插入一条记录,再更新这条记录:
(1)如果更新的是唯一索引,有异常;
(2)如果更新的是自增主键,就没有异常;
画外音:先不要被“dead lock”描述所迷惑,是死锁问题,阻塞问题,还是其他异常,还另说。

而且,据朋友所述,还能够复现:
(1)开启事务;
(2)插入记录;
(3)sleep 5秒;
(4)修改被插入的记录;
在并发时稳定复现。
根据朋友的描述,在线下开了多个MySQL客户端进行了并发模式测试,结果还挺出乎意料的。
第一步:数据准备
create 继续阅读与本文标签相同的文章
-
Apache NiFi之MySQL数据同步
2026-05-21栏目: 教程
-
关于波分复用技术的CWDM与DWDM光模块介绍
2026-05-21栏目: 教程
-
SpringBoot 返回参数为null,不返回的处理
2026-05-21栏目: 教程
-
1.44元起,快照服务让您ECS数据全年无忧
2026-05-21栏目: 教程
-
数据结构(1):使用面向对象模拟数组
2026-05-21栏目: 教程
