创新路
我们一直在努力

常见的Deadlock found when trying to get lock汇总及规避方法

图片.png

图片.png

图片.png

常见的死锁场景:
至少2个client(A,B)同时在执行事务,clientA锁定了某一行,未提交事务,此时clientB也需要update/delete这一行,此时clientB就会进入等待状态,直到出现Deadlock 。

在事务中用for循环更新一张表,这张表中有主键和二级索引,更新就是以二级索引为条件,这时候,因为for循环里面执行的循序不一定,所以有可能导致死锁

如何减少死锁的发生?
1)事务操作锁定的行数较少(更精确的索引条件)。
2)保证事务较短的执行时间,完成后马上提交。

3)优化索引结构,采用组合索引规避。

官方相关BUG介绍:https://bugs.mysql.com/bug.php?id=77209

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机