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

Deadlock dall'intervallo si blocca sull'indice della chiave primaria

È il classico deadlock quando un processo (vittima) legge su serializable level e un altro aggiorna la stessa tabella in cluster.

Sei confuso con ciò che viene convertito in cosa.

Il primo processo ("process5e13b88") ha acquisito RangeS-S blocca e attende un altro RangS-S lucchetto (dove è presente X blocco del processo di aggiornamento), non converte nulla.

Il secondo "process5e45b88" ha acquisito X bloccare su una chiave e U su un'altra chiave e vuole convertirlo in X ma non può perché c'è RangeS-S serratura.

Allego l'immagine dove puoi vedere che un processo vuole e acquisisce solo RangeS-S lucchetti e un altro solo X serrature.

Quando vedi RangeS-U lock significa che c'è RangeS-S bloccare l'intervallo ma la chiave stessa ha U bloccare