锁升级(escalate)
与锁的数量有关,达到阀值之后,升级所有连接、所有事物的锁,直接升级到table lock,而不会小升级到page lock
锁升级的时机:
总之,锁的数量达到一定值之后进行升级。总体值和单事物单表(索引)的两种计数方式。另外一种是以内存占用量为计数方式。一次不成功,间隔一定树木后再次试图升级。
减少锁升级:
1.优先使用行版本控制
2.跟踪标志1211。DBCC TRACEON 1211, -1
3. 跟踪标志1224
4.加大阀值,减少锁升级的可能。In many cases, it is desirable to control the escalation threshold at the object
level
sp_configure 'locks', 10000;
GO
RECONFIGURE;
GO
参考:
在大多数情况下,数据库引擎使用默认的锁定和锁升级设置进行操作时提供的性能最佳。如果数据库引擎实例生成大量锁并且频繁进行锁升级,请考虑通过下列方法减少锁定:
对于读取操作,使用不会生成共享锁的隔离级别。
当 READ_COMMITTED_SNAPSHOT 数据库选项为 ON 时,使用 READ COMMITTED 隔离级别。
使用 SNAPSHOT 隔离级别。
使用 READ UNCOMMITTED 隔离级别。此隔离级别只能用于能对脏读进行操作的系统。
使用 PAGLOCK 或 TABLOCK 表提示,使数据库引擎使用页、堆或索引锁而不是行锁。但是,