Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Deadlock di SQL Server tra selezione/aggiornamento o selezioni multiple

Ciò può verificarsi perché una selezione esegue un blocco su due indici diversi, mentre un aggiornamento esegue un blocco sugli stessi indici nell'ordine opposto. La selezione necessita di due indici perché il primo indice non copre tutte le colonne a cui deve accedere; l'aggiornamento necessita di due indici perché se aggiorni la colonna chiave di un indice devi bloccarla.

http://blogs.msdn.com/bartd/archive /2006/09/25/770928.aspx ha una spiegazione fantastica. Le correzioni suggerite includono l'aggiunta di un indice che copra tutte le colonne necessarie alla selezione, il passaggio all'isolamento dello snapshot o la forzatura esplicita della selezione ad acquisire un blocco dell'aggiornamento di cui normalmente non avrebbe bisogno.