(在 Azure 中运行的 SQL Server 12.0.2000.8)
我的理解是 REORGANIZE 索引不应该干扰其他操作(也就是说,它不应该阻止对正在进行索引重组的表的查询,当然也不应该阻止对其他表的查询)。但是,我有一个夜间索引维护作业,它似乎在运行时阻塞了其他查询。
导致阻塞的查询格式为:
ALTER INDEX [indexName] ON tableName REORGANIZE
Run Code Online (Sandbox Code Playgroud)
它导致其他查询等待,即使是简单的查询,例如:
SELECT * FROM tableName WHERE indexedColumn = @value
Run Code Online (Sandbox Code Playgroud)
我使用该sp_who2过程来查看哪些查询正在等待,以及它们被哪些其他查询阻止。再一次,正在进行索引维护的表和 SELECT 中的表完全不相关(它们甚至在不同的模式中;FWIW 被重组的表在 中dbo)。
被重组的表有近 5 亿行。受影响的索引是外键使用的单个 bigint 列上的非聚集、非唯一索引。表本身由两个 bigint 列、一个 tinyint 和几个小 nvarchars 组成。
看起来没什么特别的,但我不明白为什么它会阻止其他查询。是否有一些我遗漏的隐藏依赖?