Hello,大家好,我是 Skow
阅读这篇文章之前,大家可以问问自己
-
何为死锁?
-
Mysql具有哪些锁?
-
Mysql 的锁模式兼容矩阵你是否清楚?
-
如何排查死锁问题?
如果你可以闭着眼睛回答出来这些问题的,那么就默默点赞离开👍🏻
如果你对上面的知识点,还有点含糊不清,那么这篇文章将会带你从一个真实业务场景入手,分析死锁问题,希望本文对你有所帮助,Let’s go 🤨
业务背景
目前我司有两个系统 A 系统、B系统
A 系统存放着公司所有人员的信息
B 系统需要日终定时从 A 系统同步数据
人员已在 B 系统中存在,则更新,不存在则插入
因人员信息过多,所以采取多线程方式同步人员数据
在验证代码的时候,😡测试人员怒气冲冲的反应, sync_user 也就是我们的同步人员的那张数据表打不开了
遇事莫慌,先甩锅运维,“小姐姐,莫急莫慌,肯定是数据库系统出问题了"
经过运维和DBA的排查,其实罪魁祸首是开发
我们的代码导致了这张表出现了死锁,从而导致表打不开了
那,到底是为何发生了死锁?接下来我们还原一下案发现场