SQL Server Deadlock Graph - Tabellen-, Seiten- oder Zeilensperre?

10

Gibt es eine Möglichkeit zu entschlüsseln, ob eine Sperre in einem Deadlock-Diagramm Tabellen-, Seiten- oder Zeilenebene hat? Ich habe alle Informationen, die ich aus der Grafik benötige, einschließlich der Isolationsstufe (2), aber ich möchte dies auch wirklich wissen.

Vielen Dank an alle, die helfen können!

Tuseau
quelle

Antworten:

13

Im Deadlock-Diagramm XML sehen Sie Folgendes:

<deadlock-list>
  <deadlock victim="...">
    <process-list>
      <process id="..." ... waitresource="X:..."
...

Das Xist das Interessante, mögliche Werte, an denen Sie interessiert sind, sind:

  • RID für Zeilen-ID (Sperren auf Zeilenebene)
  • PAG für Sperre auf Seitenebene
  • OBJECT(die möglicherweise weiter qualifiziert sind TAB, um eine Tabellensperre anzuzeigen)

Es gibt auch einige andere Arten, die in der Dokumentation aufgeführt sind .

Gaius
quelle
Danke, das ist nützlich. Obwohl ich in meinem Diagramm zwei Prozesse habe, die anscheinend unterschiedliche Seiten verwenden: waitresource = "RID: 21: 1: 2588: 0" waitresource = "RID: 21: 1: 2699: 1" Wenn sie also unterschiedliche Seiten verwenden , dann können sie nicht über dieselbe Zeile in Konflikt geraten, richtig? Weil ich für diese Abfrage einen WITH-Hinweis (ROWLOCK) verwende.
Tuseau
2
Wenn Prozess 1 2699 hält und 2588 will und Prozess 2 2588 hält und 2699 will, würde dies zum Stillstand kommen. Denken Sie daran, dass ein Deadlock eine zirkuläre Abhängigkeit impliziert.
Gaius