《MySQL DBA: Purge 死锁》

本文通过实例演示了在MySQL中,Purge操作未完成时,新插入与已删除但未回收的唯一键相同记录可能导致的死锁情况。详细解释了死锁产生的原因、插入过程中的锁机制,并提供了避免死锁的解决方案。
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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HarkerYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值