O script de configuração
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)
Eu executo uma atualização simples e mantenho a transação aberta no nível de isolamento de leitura confirmada.
begin tran
update t2 set [col2]=[col2]+1 where col1=6
Se eu verificar sp_lock em outra sessão, recebo os resultados abaixo
O que estou tentando entender são os bloqueios de teclas no índice não clusterizado (indid 2). Por que há dois bloqueios de teclas no índice não clusterizado?
Se eu verificar a página dbcc na página id 248, eu poderia localizar o óbvio ((1bfceb831cd9)) que é o bloqueio para a entrada para o registro 6 que foi alterado para 7. Saída da PÁGINA DBCC abaixo
O que estou tentando entender é qual é o propósito do outro bloqueio de chave (5ebca7ef4e2c) e qual é o seu bloqueio.
Se você tentar o seguinte...
Você verá
Mostrando que o
UPDATE
índice não clusterizado é implementado como um par excluir/inserir.(5ebca7ef4e2c)
é o hash para o registro inicial6,6
(1bfceb831cd9)
é o valor após a atualização6,7
. Veja também o número do slot