Analysieren von Deadlocks mit SQL Server Profiler

Verwenden Sie SQL Server Profiler, um die Ursache für einen Deadlock zu identifizieren. Ein Deadlock tritt dann auf, wenn eine zyklische Abhängigkeit zwischen mindestens zwei Threads oder Prozessen für eine beliebige Gruppe von Ressourcen in SQL Server besteht. Mit SQL Server Profiler können Sie eine Ablaufverfolgung erstellen, die Deadlockereignisse zu Analysezwecken aufzeichnet, wiedergibt und anzeigt.

Um eine Ablaufverfolgung für Deadlockereignisse auszuführen, fügen Sie die Deadlock graph-Ereignisklasse zu einer Ablaufverfolgung hinzu. Diese Ereignisklasse füllt die TextData-Datenspalte in der Ablaufverfolgung mit XML-Daten über den Prozess und die Objekte auf, die am Deadlock beteiligt sind. SQL Server Profiler kann das XML-Dokument in eine XML-Deadlockdatei (.xdl) extrahieren, die Sie später in SQL Server Management Studio anzeigen können.Sie können SQL Server Profiler so konfigurieren, dass Deadlock graph-Ereignisse entweder in eine einzelne Datei mit allen Deadlock graph-Ereignissen oder in separate Dateien extrahiert werden. Das Extrahieren kann auf eine der folgenden Arten ausgeführt werden:

  • Beim Konfigurieren der Ablaufverfolgung über die Registerkarte Ereignisextraktionseinstellungen. Beachten Sie, dass diese Registerkarte erst angezeigt wird, wenn Sie das Deadlock graph-Ereignis auf der Registerkarte Ereignisauswahl ausgewählt haben.

  • Mithilfe der Option SQL Server-Ereignisse extrahieren im Menü Datei

  • Einzelne Ereignisse können auch extrahiert und gespeichert werden, indem Sie mit der rechten Maustaste auf ein bestimmtes Ereignis klicken und Ereignisdaten extrahieren wählen.

SQL Server Profiler und SQL Server Management Studio verwenden Deadlock-Wartediagramme zum Beschreiben von Deadlocks. Das Deadlock-Wartediagramm enthält Prozessknoten, Ressourcenknoten und Rahmen, die die Beziehungen zwischen den Prozessen und Ressourcen darstellen. Die folgende Tabelle enthält die Definitionen der Komponenten in Wartediagrammen:

Prozessknoten

Ein Thread, der eine Aufgabe ausführt, beispielsweise INSERT, UPDATE oder DELETE

Ressourcenknoten

Ein Datenbankobjekt, beispielsweise eine Tabelle, ein Index oder eine Zeile

Rahmen

Die Beziehung zwischen einen Prozess und einer Ressource. Ein request-Rahmen tritt auf, wenn ein Prozess auf eine Ressource wartet. Ein owner-Rahmen tritt auf, wenn eine Ressource auf einen Prozess wartet. Die Rahmenbeschreibung enthält den Sperrmodus. Beispiel: Modus: X. Weitere Informationen zu den möglichen Werten, die Sperrmodi kennzeichnen, finden Sie unter Sperrmodi.

In einem Wartediagramm enthält der Prozessknoten Informationen zum Prozess. In der folgenden Tabelle werden die Komponenten eines Prozesses erläutert.

Komponente

Definition

Serverprozess-ID

Serverprozessbezeichner (Server Process Identifier, SPID). Ein vom Server zugewiesener Bezeichner für den Prozess, der im Besitz der Sperre ist.

Serverbatch-ID

Serverbatch-Bezeichner (Server Batch Identifier, SBID)

Ausführungskontext-ID

Ausführungskontext-Bezeichner (Execution Context ID, ECID). Die Ausführungskontext-ID für einen bestimmten Thread, der einer bestimmten SPID zugeordnet ist.

ECID = {0, 1, 2, 3, ......n}, wobei 0 immer den übergeordneten Thread oder Hauptthread darstellt und {1, 2, 3, ......n} die Subthreads.

Deadlockpriorität

Deadlockpriorität für den Prozess. Weitere Informationen zu möglichen Werten finden Sie unter SET DEADLOCK_PRIORITY (Transact-SQL).

Verwendetes Protokoll

Protokollspeicherplatz, der vom Prozess belegt wird

Besitzer-ID

Transaktions-ID für die Prozesse, die Transaktionen verwenden und sich aufgrund einer Sperre gegenwärtig im Wartezustand befinden

Transaktionsdeskriptor

Zeiger auf den Transaktionsdeskriptor, der den Transaktionszustand beschreibt

Eingabepuffer

Eingabepuffer des aktuellen Prozesses. Er definiert den Ereignistyp und die ausgeführte Anweisung. Zulässige Werte:

  • Language

  • RPC

  • Keine

Anweisung

Anweisungstyp. Folgende Werte sind möglich:

  • NOP

  • SELECT

  • UPDATE

  • INSERT

  • DELETE

  • Unbekannt

Bei einem Deadlock warten zwei Prozesse jeweils auf eine Ressource, die vom anderen Prozess beansprucht wird. In einem Deadlockdiagramm werden die Ressourcen als Ressourcenknoten angezeigt. Jede Ressource entspricht einem der unter Sperrengranularität und -hierarchien aufgeführten Typen.

Community-Beiträge

HINZUFÜGEN
Anzeigen: