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