Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Deadlock von Bereichssperren auf Primärschlüsselindex

Es ist ein klassischer Deadlock, wenn ein Prozess (Opfer) auf serializable liest Ebene und eine andere aktualisiert dieselbe gruppierte Tabelle.

Sie sind verwirrt darüber, was in was umgewandelt wird.

Der erste Prozess ("process5e13b88") hat RangeS-S erworben lock und wartet auf ein weiteres RangS-S lock (wo X steht Sperre des Update-Vorgangs), es konvertiert nichts.

Der zweite "process5e45b88" hat X erworben Schloss auf einen Schlüssel und U auf einen anderen Schlüssel und will ihn in X umwandeln aber es kann nicht, weil es RangeS-S gibt sperren.

Ich hänge das Bild an, wo Sie sehen können, dass ein Prozess nur RangeS-S will und erwirbt Schlösser und andere nur X Schlösser.

Wenn Sie RangeS-U sehen lock bedeutet, dass RangeS-S vorhanden ist Bereich sperren, aber der Schlüssel selbst hat U sperren