Qualcuno può aiutarmi per un deadlock in SQL Server 2005?deadlock di SQL Server 2005 con indice non cluster
Per un semplice test, ho una tabella "Libro" che ha una chiave primaria (id) e un nome di colonna. L'indice predefinito di questa chiave primaria è non cluster.
Il deadlock si verifica quando due sessioni vengono eseguite contemporaneamente. Il monitor delle attività mostra la prima sessione "// passaggio 1" che blocca la riga (blocco della rimozione) con il blocco X. La seconda sessione mantiene il blocco della riga U e il blocco della chiave U. L'immagine deadlock mostra "// step2" della prima sessione richiede il blocco U del tasto.
Se l'indice è in cluster, in questo caso non esiste un deadlock. "// step 1" manterrà la riga e il blocco dei tasti contemporaneamente, quindi non ci sono problemi. Posso capire che bloccare una riga bloccherà anche l'indice poiché il nodo foglia dell'indice cluster è costituito da dati di riga.
Ma, perché l'indice non cluster è in questo modo? Se la seconda sessione contiene il blocco U della chiave, perché il "passaggio 1" della prima sessione non contiene questo blocco poiché è lo stesso dell'istruzione di aggiornamento.
--// 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
avete una chiave in cluster sulla vostra tabella di esempio del libro ?? Non penso che sia una questione se il tuo PK è in cluster o no - penso che sia più importante sapere se hai effettivamente una Clustered Key (e quindi una tabella cluster), o se hai a che fare con un heap (nessun indice cluster) –
Puoi aggiungere l'output rilevante di 'exec sp_lock' mentre è in deadlock? – Andomar
Da sqlprofiler, l'immagine deadlock mostra "// step2" della prima sessione richiede il blocco della chiave U, ma è tenuto da seesion2. –