SELECT 查询需要 SCH-S 锁。这可以与其他读取查询共享。
UPDATE 查询需要 SCH-M 锁。这不能与其他读取/更新查询共享。
该示例显示索引重组 (Sch-S) 锁阻塞了统计信息更新的 Sch-M 锁。但为什么它也阻止了 SELECT 查询请求的后续 Sch-S 锁?Sch-S 锁不是共享的吗?
SELECT 查询需要 SCH-S 锁。这可以与其他读取查询共享。
UPDATE 查询需要 SCH-M 锁。这不能与其他读取/更新查询共享。
该示例显示索引重组 (Sch-S) 锁阻塞了统计信息更新的 Sch-M 锁。但为什么它也阻止了 SELECT 查询请求的后续 Sch-S 锁?Sch-S 锁不是共享的吗?
正如 Charlieface 指出的那样,这是一个连续的阻塞链。
SCH-S
并且SCH-M
是彼此不兼容的锁类型。您可以使用文档中的以下锁兼容性矩阵来查看兼容的内容:在您从 MS SQL Tips 提供的示例中,有一个
ALTER INDEX
SCH-S
锁定查询阻止了UPDATE STATISTICS
使用SCH-M
锁的查询。然后该UPDATE STATISTICS
查询阻止SELECT
使用SCH-S
锁的第三个查询 (a)。所以SCH-S
blocksSCH-M
blocksSCH-S
是这里的阻塞链,因为它们在两个方向上都是不兼容的锁类型。