什么场景下会发生页锁等待?

博雄 胡 70 信誉分
2024-04-11T05:54:29.4833333+00:00

问题来自于理解sys.dm_db_index_operational_stats.page_lock_wait_count与page_lock_wait_in_ms字段值来源,生产环境上能看到这俩值很高,因而我想了解什么场景下会发生。

我尝试用select、update没有成功累计它们,但select用提示paglock则可以累计。我想是因为没有查询提示时,这些操作都是首先申请key或者range再申请页/表/分区/数据库上级锁,key和range没有拿到时无法拿到pagekey所以系统视图里没有累计。而用paglock提示直接拿页锁时可以累计,可生产环境中应该没有使用到paglock,也没有索引维护计划(忘记哪里提到组织索引时会直接使用页锁来提升速度)。所以生产环境中的page_lock_wait_count与page_lock_wait_in_ms值是如何累计的呢?

SQL Server
SQL Server
Microsoft 关系数据库管理和分析系统的一个系列,用于实现电子商务、业务线和数据仓库解决方案。
103 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. CosmogHong-MSFT 24,026 信誉分 Microsoft 供应商
    2024-04-11T07:17:43.7866667+00:00

    我尝试用select、update没有成功累计它们,但select用提示paglock则可以累计。

    或许是锁升级的原因。在单个级别上获取超过 5,000 个锁的情况下,SQL Server 会将这些锁升级为单个表级锁。默认情况下,SQL Server 将始终直接升级到表级别,这意味着永远不会升级到页级别。 SQL Server 将升级为表级别的排他锁 (X),而不是获取大量行和页锁。

    sys.dm_db_index_operational_stats不返回有关内存优化索引的信息。有关内存优化索引使用的信息,请参阅**sys.dm_db_xtp_index_stats (Transact-SQL)**。


    如果答案是正确的解决方案,请点击“接受答案”并投赞成票。如果您对此答案有其他疑问,请点击“评论”。