你的位置:首页 > 软件开发 > 数据库 > 锁升级(Lock Escalations)——它们经常发生么?

锁升级(Lock Escalations)——它们经常发生么?

发布时间:2016-05-13 12:00:15
前段时间,我写了一些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 (#换成@)。

可能感兴趣文章

我的浏览记录