安装脚本
CREATE TABLE t2 ( [col1] INT, [col2] INT );
DECLARE @int INT;
SET @int = 1;
WHILE (@int <= 1000)
BEGIN
INSERT INTO t2
([col1], [col2])
VALUES (@int*2, @int*2);
SET @int = @int + 1;
END
GO
create clustered index cl on t2(col1)
create index ncl on t2(col2)
我运行了一个简单的更新并保持事务在读取提交隔离级别打开。
begin tran
update t2 set [col2]=[col2]+1 where col1=6
如果我在另一个会话中检查 sp_lock,我会得到以下结果
我想了解的是非聚集索引(indid 2)上的键锁。为什么非聚集索引上有两个键锁?
如果我检查页面 id 248 上的 dbcc 页面,我可以找到明显的一个((1bfceb831cd9)),它是记录 6 的条目的锁,记录 6 已更改为 7。下面 DBCC PAGE 的输出
我想了解的是另一个钥匙锁 (5ebca7ef4e2c) 的用途是什么以及它的锁定是什么。
如果您尝试以下...
你会看见
显示
UPDATE
针对非聚集索引的实现是删除/插入对。(5ebca7ef4e2c)
是初始记录的哈希6,6
(1bfceb831cd9)
是更新后的值6,7
。还要看插槽号