我的理解是在线索引在开始(准备)和结束(最终)阶段获取锁。但是,我们看到很多 DML 查询在构建阶段被阻止。
被阻止的查询样本显示它们有一些共同点 - 等待类型是 PAGELATCH_UP,等待资源引用 PFS 页面,并且查询使用锁定提示(NOLOCK、ROWLOCK 等)。锁定提示会干扰吗?
任何人都可以在这里阐明或指出我正确的方向吗?
让我补充一下,实际的命令是:
ALTER TABLE dbo.Whatever DROP CONSTRAINT [PK_Whatever] WITH (ONLINE=ON);
这是聚集索引,没有非聚集索引。
尽管官方文档说了什么,删除聚集索引 using
ALTER TABLE DROP CONSTRAINT
可以在线执行(在 SQL Server 2005-2014 上测试):然而,在线执行操作并不意味着其他并发查询根本不会受到影响。联机操作不需要长期锁定,但仍可能会消耗大量系统资源(例如内存、处理器、I/O)。如果这些资源成为瓶颈,并发查询可能会遇到与资源相关的等待。
在您的特定场景中,页面
PAGELATCH_UP
等待PFS
表示分配资源上的闩锁争用。任何可能的纠正措施都取决于与闩锁等待相关的资源描述。