博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
键范围锁定(Key-Rang Lock)是不是只在序列化级别中出现
阅读量:6693 次
发布时间:2019-06-25

本文共 1498 字,大约阅读时间需要 4 分钟。

以前一直认为键范围锁定只是在序列化隔离级别中才会出现,但是从论坛的一篇帖子中看到Read-Committed隔离级别中竟然也出现了:

59:50. spid24s process id=process6463b88 taskpriority=0 logused=480 waitresource=KEY: 6:72057594065715200 (8500ea663c04) waittime=516 

ownerId=773364767 transactionname=test lasttranstarted=2013-06-04T08:59:49.450 
XDES=0x80092570 lockMode=RangeS-U schedulerid=22 kpid=2872 status=suspended 

spid=57 sbid=0 ecid=0 priority=0 trancount=3 

lastbatchstarted=2013-06-04T08:59:49.453 lastbatchcompleted=2013-06-04T08:59:49.450 
isolationlevel=read committed (2) xactid=773364767 currentdb=6 lockTimeout=4294967295 
clientoption1=671088672 clientoption2=128056

之后查到两片文章提到SQL Server在一定的条件下会隐式的提升隔离级别到序列化。

微软用级联删除的例子做了说明:

createtableFoo(FooIdintnotnullprimarykey)

createtableBar(FooIdintnotnull,BarIdintnotnull)

altertableBaraddconstraintPK_Barprimarykey (FooId,BarId)

altertableBaraddconstraintFK_Bar_Fooforeignkey (FooId)referencesFoo(FooId)ondeletecascade

insertintoFoovalues (1)insertintoBarvalues (1, 1)

settransactionisolationlevelreadcommitted

begintran

deletefromFoowhereFooId= 1 

committran

删除的操作需要保持:

1.删除Foo 表的数据其实也要删除Bar表中相关联的数据

2.在语句结束的时候,外键约束还是有效的。

所以在read-committed隔离级别下,X locks一直持续到交易结束,但是不能避免在删除的同时其他人插入数据。所以需要SERIALIAZABLE隔离级别。

所以,对于类似的操作,不需要用户显示的使用serialization 隔离级别,SQL Server会自动将隔离级别升级从而阻塞其他操作插入数据从而影响外键约束。在这种情况下,SQL Server会使用键范围锁定.这种方法可以避免数据损坏。

SERIALIZABLE级别的锁会一直保持到交易结束,如果一个批次中有多条语句,可能需要一段时间释放这些锁。因为SQL Server知道使用了什么锁,并且什么时候释放才是安全的。

 

另外索引视图维护也是相同的情况。

更多资料可以参考:

 

本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/1217126

转载地址:http://jsjoo.baihongyu.com/

你可能感兴趣的文章
百度研发面经
查看>>
深度解析 Go 语言中「切片」的三种特殊状态
查看>>
ES6 - 函数扩展
查看>>
Linux中apt与apt-get命令的区别与解释(转)
查看>>
原生js 类名操作 增加 删除
查看>>
iOS 中多音频处理
查看>>
java.lang.IllegalStateException: aidl is missing
查看>>
js的数组和对象的多种"复制"和"清空", 以及区分JS数组和对象的方法
查看>>
爬虫提交form表单中含有(unable to decode value)解决方法
查看>>
Vagrant (二) - 日常操作
查看>>
PHP常用180函数总结
查看>>
React 中的事件处理
查看>>
.NET环境大规模使用OpenTracing
查看>>
js 快速排序
查看>>
Sentry的使用
查看>>
如何在微服务架构中对资源(前端页面+后端接口)进行权限控制
查看>>
原生 js 实现面对对象版瀑布流
查看>>
逝去的2018年,年度总结
查看>>
链客区块链技术面试题目专题(二)
查看>>
你的like语句为啥没索引?
查看>>