SQL Server - RangeX-X 和 RangeI-N 锁

yru*_*hka 8 sql-server locked-objects locking

我在死锁分析中遇到了死点。根据msdn

RangeX-X 为 Exclusive range,独占资源锁;在更新范围内的键时使用。RangeI-N 是插入范围,空资源锁;用于在将新键插入索引之前测试范围。

所以我明白,如果我在 2 个键列上有一个索引 - 并且我插入一个新键,我将拥有 RangeI-N 锁,但如果我从索引更新现有键,我将拥有 RangeX-X。

但我的问题或多或少复杂。假设我在 A、B 列和 C 列上有索引 IX_keys_included。

在 Serializable 隔离模式下,我为包含的列 C 插入一个新值。索引 IX_keys_included 是否会有 RangeI-N 或 RangeX-X 锁?实际上,鉴于我为索引中包含的列插入了一个新列,是否会有任何锁定?

Rat*_*rol 1

检查这个链接,从它的外观来看,意图独占(IX)锁与 RI-N 和 RX-X 锁是非法的。或者我完全偏离了基地,而且真的一点帮助都没有。我在印刷书籍Professional SQL Server 2008 Internals and Troubleshooting中找到了该表,