Purge 死锁演示

表中存在记录(unique key) 10, 20, 30, 40 (且有 自增主键 ),现在删除记录 20 ,并且已经 提交 了该事物。 purge 线程此时还 没有回收 该记录,且此时又 插入 新的记录 20

自增主键图中没有给出
回顾插入过程 完整的插入过程如下:
假设现在有记录 10, 30, 50, 70 ;且为 主键 ,需要插入记录 25 。
1、找到 小于等于25的记录 ,这里是 10
-
如果记录中已经 存在记录25 ,且带有 唯一性约束 ,则需要在 记录25 上增加 S Gap-lock
-
不直接报错退出或者提示已存在的原因,是因为有可能之前的 记录25 标记为删除( delete-mark ),然后等待 purge
-
如果 假设 这里 没有S Gap-Lock ,此时 记录30 上也 没有锁 的,按照下面的步骤,可以插入 两个2
本文通过实例演示了在MySQL中,Purge操作未完成时,新插入与已删除但未回收的唯一键相同记录可能导致的死锁情况。详细解释了死锁产生的原因、插入过程中的锁机制,并提供了避免死锁的解决方案。
订阅专栏 解锁全文
234

被折叠的 条评论
为什么被折叠?



