唯一索引范围查询锁 bug修复了

本文探讨了InnoDB中唯一索引范围查询锁的问题,并通过实验证明在8.0.24版本中已修复了一个关于锁范围的bug。原本在进行范围查询时,会锁定不必要的范围,现在仅锁定实际查询范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

唯一索引范围查询锁 bug修复了

其他资料介绍入下:
image-20230112180547545
session A 是一个范围查询,按照原则 1 的话,应该是索引 id 上只加 (10,15] 这个 next-key lock ,并且因 为 id 是唯一键,所以循环判断到 id=15 这一行就应该停止了。

但是实现上, InnoDB 会往前扫描到第一个不满足条件的行为止,也就是 id=20 。而且由于这是个范围扫 描,因此索引 id 上的 (15,20] 这个 next-key lock 也会被锁上。照理说,这里锁住 id=20 这一行的行为,其 实是没有必要的。因为扫描到 id=15 ,就可以确定不用往后再找了。

验证

版本 8.0.24
在这里插入图片描述

数据准备
在这里插入图片描述
在这里插入图片描述

col1 加了普通索引
在这里插入图片描述
开始验证
按照上述资料锁住范围是 (10,20]
其实值锁住了(10,15]
在这里插入图片描述
在15 到20之间插入数据成功 说明并没有锁住 (15,20]
在这里插入图片描述
插入 14时 发生阻塞
在这里插入图片描述
进行update 语句验证时 只锁住了 15 这一条记录
**加粗样式**

结论:唯一索引范围查询锁 bug修复了,唯一索引范围查询时,插入时是间隙锁,查询时是行索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值