凌魁 发表于 2024-7-24 15:02:09

由delete语句引起的锁范围扩大

由delete语句引起的锁范围扩大

阿里云月报中的一句话,出处:http://mysql.taobao.org/monthly/2022/01/01/
但是Ghost Record是可以跟正常的Record一样作为Key Range Lock的加锁对象的。可以看出这相当于把删除操作变成了更新操作,因此删除事务不再需要持有Next Key Lock
这句话意思是:假设delete语句物理删除数据,那么delete事务会持有gap lock,那么会造成锁扩大,而实际上delete操作会转为update操作,最终delete事务持有的gap lock退化为record lock,不会造成锁范围扩大
 
下面用SQL Server和MySQL做测试,看一下锁的情况
SQL Server 2012
use test
go
<br>
CREATE TABLE t (
id int NOT NULL primary key,
c int DEFAULT NULL,
d int DEFAULT NULL
)



CREATE NONCLUSTERED INDEX ON .
(
    ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
GO



insert into t values(5,5,5),(10,10,10),(20,20,20),(25,25,25); 
使用下面的执行顺序

 
 
在session1执行下面语句
--session 1USE testGOSET TRANSACTION ISOLATIONLEVELSERIALIZABLEGObegintransactionselect id from t where c >10 and c 10 and c
页: [1]
查看完整版本: 由delete语句引起的锁范围扩大