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

打印 上一主题 下一主题

主题 1839|帖子 1839|积分 5517

由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
  1. use test
  2. go
  3. <br>
  4. CREATE TABLE t (
  5.   id int NOT NULL primary key,
  6.   c int DEFAULT NULL,
  7.   d int DEFAULT NULL  
  8. )
  9. CREATE NONCLUSTERED INDEX [ix_t_c] ON [dbo].[t]
  10. (
  11.     [c] ASC
  12. )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 [PRIMARY]
  13. GO
  14. insert into t values(5,5,5),(10,10,10),(20,20,20),(25,25,25);
复制代码
 
使用下面的实行顺序

 
 
在session1实行下面语句
[code]--session 1USE testGOSET TRANSACTION ISOLATION  LEVEL  SERIALIZABLEGObegin  transactionselect id from t where c >10 and c 10 and c

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表