前段时间,我写了一些SQL Server里锁升级的基础知识,还有它是如何影响执行计划的。今天,我想进一步谈下锁升级:锁升级什么时候发生?通常在SQL Server里如果在SQL语句里你请求的行数超过5000(SELECT,INSERT,UPDATE,DELETE)会发生锁升级。例 ...
前段时间,我写了一些SQL Server里锁升级的基础知识,还有它是如何影响执行计划的。今天,我想进一步谈下锁升级:
锁升级什么时候发生?
通常在SQL Server里如果在SQL语句里你请求的行数超过5000(SELECT,INSERT,UPDATE,DELETE)会发生锁升级。例如当你再可重复读隔离级别(Repeatable Read Isolation Level)里,从表你读超过5000行数据,锁升级就会被SQL Server触发。
当你对超过5000行的数据运行UPDATE和DELETE语句,也会触发锁升级。作为副作用,最终你有一个共享(S)或排它(X)表锁。这肯定会伤及你的并发,降低性能和你工作负载的吞吐量。
“阻塞”锁升级
锁升级的整个想法听起来很简单,但会有大影响和副作用:如果你不能获得共享或排它表锁会发生什么,因为其他人在表上获得了不兼容的锁?在这个情况下,锁升级应该阻塞么?希望不是......
因此我们来构建一个简单的例子,在这里我们尝试重现这个情况来看下载这个特定情况下,SQL Server如何反应。下列查询在Person.Person表里聚集索引里的最后一行请求一个X锁。
-- This transaction locks the last row in the Clustered Index of the -- table Person.PersonBEGIN TRANSACTIONUPDATE Person.PersonSET LastName = '...'WHERE BusinessEntityID = 20777
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:锁升级(Lock Escalations)——它们经常发生么?
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。