Analysieren von Deadlocks mit SQL Server ProfilerAnalyze Deadlocks with SQL Server Profiler

Dieses Thema gilt für: JaSQL ServerkeineAzure SQL-DatenbankkeineAzure SQL Data Warehouse keine Parallel DatawarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse Verwendung SQL Server ProfilerSQL Server Profiler zum Identifizieren der Ursache eines Deadlocks. Use SQL Server ProfilerSQL Server Profiler to identify the cause of a deadlock. 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.A deadlock occurs when there is a cyclic dependency between two or more threads, or processes, for some set of resources within SQL Server. Mit SQL Server ProfilerSQL Server Profilerkönnen Sie eine Ablaufverfolgung erstellen, die Deadlockereignisse zu Analysezwecken aufzeichnet, wiedergibt und anzeigt.Using SQL Server ProfilerSQL Server Profiler, you can create a trace that records, replays, and displays deadlock events for analysis.

Um eine Ablaufverfolgung für Deadlockereignisse auszuführen, fügen Sie die Deadlock graph -Ereignisklasse zu einer Ablaufverfolgung hinzu.To trace deadlock events, add the Deadlock graph event class to a trace. Diese Ereignisklasse füllt die TextData -Datenspalte in der Ablaufverfolgung mit XML-Daten zum Prozess sowie zu vom Deadlock betroffenen Objekten auf.This event class populates the TextData data column in the trace with XML data about the process and objects that are involved in the deadlock. SQL Server ProfilerSQL Server Profiler kann das XML-Dokument in eine Deadlock-XML-Datei (.xdl) extrahieren, die Sie später in SQL Server Management Studio anzeigen können. can extract the XML document to a deadlock XML (.xdl) file which you can view later in SQL Server Management Studio. Sie können SQL Server ProfilerSQL Server Profiler so konfigurieren, dass Deadlock graph -Ereignisse entweder in eine einzelne Datei mit allen Deadlock graph -Ereignissen oder in separate Dateien extrahiert werden.You can configure SQL Server ProfilerSQL Server Profiler to extract Deadlock graph events to a single file that contains all Deadlock graph events, or to separate files. Das Extrahieren kann auf eine der folgenden Arten ausgeführt werden:This extraction can be done in any of the following ways:

  • 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.At trace configuration time, using the Events Extraction Settings tab. Note that this tab does not appear until you select the Deadlock graph event on the Events Selection tab.

  • Mithilfe der Option SQL Server-Ereignisse extrahieren im Menü DateiUsing the Extract SQL Server Events option on the File menu.

  • Einzelne Ereignisse können auch extrahiert und gespeichert werden, indem Sie mit der rechten Maustaste auf ein bestimmtes Ereignis klicken und Ereignisdaten extrahierenauswählen.Individual events can also be extracted and saved by right-clicking a specific event and choosing Extract Event Data.

DeadlockdiagrammeDeadlock Graphs

SQL Server ProfilerSQL Server Profiler und SQL Server Management StudioSQL Server Management Studio verwenden Deadlock-Wartediagramme zum Beschreiben von Deadlocks. and SQL Server Management StudioSQL Server Management Studio use a deadlock wait-for graph to describe a deadlock. Das Deadlock-Wartediagramm enthält Prozessknoten, Ressourcenknoten und Rahmen, die die Beziehungen zwischen den Prozessen und Ressourcen darstellen.The deadlock wait-for graph contains process nodes, resource nodes, and edges representing the relationships between the processes and the resources. Die folgende Tabelle enthält die Definitionen der Komponenten in Wartediagrammen:The components of wait-for graphs are defined in the following table:

ProzessknotenProcess node
Ein Thread, der eine Aufgabe ausführt, beispielsweise INSERT, UPDATE oder DELETEA thread that performs a task; for example, INSERT, UPDATE, or DELETE.

RessourcenknotenResource node
Ein Datenbankobjekt, beispielsweise eine Tabelle, ein Index oder eine ZeileA database object; for example, a table, index, or row.

RahmenEdge
Die Beziehung zwischen einen Prozess und einer Ressource.A relationship between a process and a resource. Ein request -Rahmen tritt auf, wenn ein Prozess auf eine Ressource wartet.A request edge occurs when a process waits for a resource. Ein owner -Rahmen tritt auf, wenn eine Ressource auf einen Prozess wartet.An owner edge occurs when a resource waits for a process. Die Rahmenbeschreibung enthält den Sperrmodus.The lock mode is included in the edge description. Beispiel: Modus: X.For example, Mode: X.

Deadlock-ProzessknotenDeadlock Process Node

In einem Wartediagramm enthält der Prozessknoten Informationen zum Prozess.In a wait-for graph, the process node contains information about the process. In der folgenden Tabelle werden die Komponenten eines Prozesses erläutert.The following table explains the components of a process.

KomponenteComponent DefinitionDefinition
Serverprozess-IDServer process Id Serverprozessbezeichner (Server Process Identifier, SPID). Ein vom Server zugewiesener Bezeichner für den Prozess, der im Besitz der Sperre ist.Server process identifier (SPID), a server assigned identifier for the process owning the lock.
Serverbatch-IDServer batch Id Serverbatch-Bezeichner (Server Batch Identifier, SBID)Server batch identifier (SBID).
Ausführungskontext-IDExecution context Id Ausführungskontext-Bezeichner (Execution Context ID, ECID).Execution context identifier (ECID). Die Ausführungskontext-ID für einen bestimmten Thread, der einer bestimmten SPID zugeordnet ist.The execution context ID of a given thread associated with a specific SPID.

ECID = {0,1,2,3, ...n}, wobei 0 immer den übergeordneten Thread oder Hauptthread darstellt und {1,2,3, ...n} die Subthreads.ECID = {0,1,2,3, ...n}, where 0 always represents the main or parent thread, and {1,2,3, ...n} represent the subthreads.
DeadlockprioritätDeadlock priority Deadlockpriorität für den Prozess.Deadlock priority for the process. Weitere Informationen zu den möglichen Werten finden Sie unter SET DEADLOCK_PRIORITY (Transact-SQL).For more information about possible values, see SET DEADLOCK_PRIORITY (Transact-SQL).
Verwendetes ProtokollLog Used Protokollspeicherplatz, der vom Prozess belegt wirdAmount of log space used by the process.
Besitzer-IDOwner Id Transaktions-ID für die Prozesse, die Transaktionen verwenden und sich aufgrund einer Sperre gegenwärtig im Wartezustand befindenTransaction ID for the processes which are using transactions and currently waiting on a lock.
TransaktionsdeskriptorTransaction descriptor Zeiger auf den Transaktionsdeskriptor, der den Transaktionszustand beschreibtPointer to the transaction descriptor that describes the state of the transaction.
EingabepufferInput buffer Eingabepuffer des aktuellen Prozesses. Er definiert den Ereignistyp und die ausgeführte Anweisung.Input buffer of the current process, defines the type of event and the statement being executed. Zulässige Werte:Possible values include:

SpracheLanguage

RPCRPC

KeineNone
StatementStatement Der Anweisungstyp.Type of statement. Folgende Werte sind möglich:Possible values are:

NOPNOP

SELECTSELECT

UPDATEUPDATE

INSERTINSERT

DELETEDELETE

UnknownUnknown

Deadlock-RessourcenknotenDeadlock Resource Node

Bei einem Deadlock warten zwei Prozesse auf eine Ressource, die vom jeweils anderen Prozess beansprucht wird.In a deadlock, two processes are each waiting for a resource held by the other process. In einem Deadlockdiagramm werden die Ressourcen als Ressourcenknoten angezeigt.In a deadlock graph, the resources are displayed as resource nodes.