Impasse do SQL Server 2005 com índice não clusterizado

Alguém pode me ajudar com um impasse no SQL Server 2005?

Para um teste simples, tenho uma tabela "Livro" que possui uma chave primária (id) e um nome de coluna. O índice padrão dessa chave primária énão clusterizado.

O impasse ocorre quando duas sessões são executadas ao mesmo tempo. O monitor de atividades mostra que a primeira sessão "// etapa 1" bloqueia a linha (bloqueio livre) com o bloqueio X. A segunda sessão mantém a linha U lock e a tecla U lock. A imagem do deadlock mostra "// step2" da primeira sessão requer o bloqueio U da chave.

Se o índice foragrupado, não há impasse neste caso. "// etapa 1" manterá a linha e o bloqueio de teclas ao mesmo tempo, portanto não há problema. Entendo que o bloqueio de uma linha também bloqueará o índice, pois o nó folha do índice clusterizado é um dado de linha.

Mas por quenão clusterizado índice é assim? Se a segunda sessão mantiver o bloqueio da tecla U, por que a "etapa 1" da primeira sessão não mantém esse bloqueio, pois são iguais à instrução de atualização.

--// first session
BEGIN TRAN
  update Book set name = name where id = 1 //step 1
  WaitFor Delay '00:00:20'
  update Book set name = 'trans' where id = 1 //step2
COMMIT

--// second session
BEGIN TRAN
--// this statement will keep both RID(U lock) and KEY(U lock) if first session did not use HOLDLOCK
  update Book set name = name where id = 1
COMMIT

questionAnswers(3)

yourAnswerToTheQuestion