为什么分区级锁升级不是默认设置?

Sql*_*yan 7 sql-server-2008 sql-server partitioning lock-escalation

在 SQL Server 中,锁通常从行或页 -> 表升级。从 SQL Server 2008 开始,添加了一个新级别的锁升级 -分区级别

但是,这不会为分区表自动启用 - 默认情况下,该表设置为跳过分区锁定并从行或页 -> 表开始。为什么会这样?有什么原因我不想把我所有的表从 切换TABLEAUTO以便它们将锁升级到分区级别而不是表级别?

由于默认值仍然是TABLE,我认为AUTO.

SQL*_*ner 7

BOL有答案——默认情况下它不是 ON,因为它可能会增加死锁的可能性。

数据库引擎不会将行或键范围锁升级为页锁,而是将它们直接升级为表锁。同样,页锁总是升级为表锁。在 SQL Server 2008 中,分区表的锁定可以升级到关联分区的 HoBT 级别,而不是表锁定。HoBT 级锁不一定锁定分区的对齐 HoBT。

HoBT 级别的锁通常会增加并发性,但是当锁定不同分区的事务都希望将其排他锁扩展到其他分区时,会引入死锁的可能性。在极少数情况下,TABLE 锁定粒度可能会表现得更好。