锁升级

锁升级就是将大量较细粒度的锁(例如行)转换为少量较粗粒度的锁(例如表)。利用锁升级可以减少系统开销。

Microsoft 当事务超出其升级阈值时,SQL Server 2005 Compact Edition (SQL Server Compact Edition) 自动将行锁和页锁升级为表锁。在 SQL Server Compact Edition 中,锁升级可以从行到表或从页到表,但不能从行到页。在表级别上升级时,不能请求低于表的锁。

例如,在行上执行表事务时,SQL Server Compact Edition 将自动在受影响的行上获取锁,同时将更高级别的意向锁置于包含这些行的页和表上。所有相关的索引页也将同时锁定。当事务所持有的锁的数量超出其阈值时,SQL Server Compact Edition 就会尝试将表上的意向锁更改为更强的锁。例如,意向排他 (IX) 锁可以更改为排他 (X) 锁。得到更强的锁后,事务在表上所持有的所有页级及行级锁都将予以释放。

如果请求锁时超出特定的锁升级阈值,锁就会按各个表分别进行升级。对于所有子表级的锁而言,不管类型如何,都将计入阈值统计。升级阈值应仅视为估计值,这是因为内部操作所请求的锁都已计入阈值统计中。升级过程可能会早于预期时间。

如果由于锁冲突而导致无法进行升级,事务仍将继续,但可能会在以后尝试重新进行升级。

注意:
除非属于临时表锁,否则意向锁、行锁和页锁都将计入升级统计中。当特定表上意向锁、行锁和页锁的总数超出升级阈值时,就会进行升级。

您可以通过设置锁升级阈值来控制每个会话的锁升级,如以下代码示例所示:

SET LOCK_ESCALATION 1000;

此设置影响数据库中的所有表。默认值为 100。

请参阅

概念

了解锁定
显示锁定信息
自定义锁定

帮助和信息

获取 SQL Server Compact Edition 帮助