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!

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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.