> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Datenbank-Deadlocks

> Protokollieren und analysieren Sie SQL-Datenbank-Deadlocks in ABBYY FlexiCapture mithilfe von Extended Events-Sitzungen mit Beispielabfragen für XEvents und die system_health-Sitzung.

Wenn bei der Verwendung des Programms SQL-Datenbank-Deadlocks auftreten, aktivieren Sie mithilfe des Extended Events-Systems die Protokollierung von Deadlock-Informationen.

<div id="create-an-xevents-session">
  ## Eine XEvents-Sitzung erstellen
</div>

Erstellen Sie die Sitzung mit dem Assistenten in SQL Server Management Studio:

1. Starten Sie den Assistenten für neue Sitzungen im Object Explorer unter **Management → Extended Events → Sessions**.

   <Frame>
     <img src="https://mintcdn.com/abbyy/XVEmG3cTpHwMKf5X/images/flexi-capture/TG_Communication_DeadLock_1.png?fit=max&auto=format&n=XVEmG3cTpHwMKf5X&q=85&s=34da823659fa5d183236dffad4ea93dd" alt="Screenshot von SQL Server Management Studio beim Starten des Assistenten für neue Sitzungen im Object Explorer unter Management, Extended Events, Sessions." width="278" height="300" data-path="images/flexi-capture/TG_Communication_DeadLock_1.png" />
   </Frame>
2. Geben Sie einen Namen für Ihre Sitzung an. Damit sie beim Start des Servers automatisch gestartet wird, wählen Sie die Option **Start the event session at server startup** aus.

   <Frame>
     <img src="https://mintcdn.com/abbyy/XVEmG3cTpHwMKf5X/images/flexi-capture/TG_Communication_DeadLock_2.png?fit=max&auto=format&n=XVEmG3cTpHwMKf5X&q=85&s=ec0de39e0fb9b653601f9dd895a6663c" alt="Screenshot des Assistenten für neue Sitzungen mit eingegebenem Sitzungsnamen und ausgewählter Option Start the event session at server startup." width="716" height="333" data-path="images/flexi-capture/TG_Communication_DeadLock_2.png" />
   </Frame>
3. Suchen Sie im Abschnitt **Select Events To Capture** nach `xml_deadlock_report`.

   <Frame>
     <img src="https://mintcdn.com/abbyy/XVEmG3cTpHwMKf5X/images/flexi-capture/TG_Communication_DeadLock_3.png?fit=max&auto=format&n=XVEmG3cTpHwMKf5X&q=85&s=fcc170b0d35e0d921820aa56989df4f8" alt="Screenshot des Schritts Select Events To Capture im Assistenten für neue Sitzungen mit ausgewähltem xml_deadlock_report." width="866" height="572" data-path="images/flexi-capture/TG_Communication_DeadLock_3.png" />
   </Frame>
4. Geben Sie im Abschnitt **Specify Session Data Storage** den Pfad zu dem Speicherort an, an dem die Datei mit den aufgezeichneten Sitzungsergebnissen gespeichert wird. Die Option **Enable file rollover** aktiviert die automatische Dateirotation im angegebenen Verzeichnis.
5. Im Abschnitt **Zusammenfassung** können Sie die Sitzungsergebnisse des Assistenten in T-SQL öffnen und speichern.

<div id="view-deadlock-information">
  ## Deadlock-Informationen anzeigen
</div>

<div id="from-the-xevents-session">
  ### Aus der XEvents-Sitzung
</div>

Zum Lesen von `.xel`-Dateien stellt SQL Server die tabellenwertige Funktion `sys.fn_xe_file_target_read_file` bereit. Führen Sie die folgende Abfrage in SQL Server Management Studio aus und geben Sie dabei den Pfad zu den Ablaufverfolgungsdateien an:

```sql theme={null}
select
    xdata.value('(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]', 'datetime')   as lasttranstarted,
    xdata.value('(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]', 'nvarchar(max)')  as objectname,
    xdata.value('(/event/data/value/deadlock/process-list/process/@clientapp)[1]', 'nvarchar(256)')    as client_app,
    xdata.value('(/event/data/value/deadlock/process-list/process/@hostname)[1]', 'nvarchar(256)')     as hostname,
    xdata.value('(/event/data/value/deadlock/process-list/process/@loginname)[1]', 'nvarchar(256)')    as loginname,
    xdata.value('(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]', 'nvarchar(256)')   as indexname,
    xdata.value('(/event/data/value/deadlock/process-list/process/@waittime)[1]', 'int')               as waittime,
    xdata.value('(/event/data/value/deadlock/resource-list/keylock/@mode)[1]', 'nvarchar(10)')         as lockmode,
    xdata.query('(/event/data/value/deadlock)[1]')                                                     as deadlock_graph
from sys.fn_xe_file_target_read_file('D:\MSSQL\XE\deadlocks\deadlocks*.xel', null, null, null) as f  -- Platzhalter (deadlocks*.xel)
cross apply (select cast(f.event_data as xml)) as e(xdata);
```

<div id="from-the-system_health-session">
  ### Über die `system_health`-Sitzung
</div>

Wenn die Deadlock-Protokollierung nicht aktiviert ist, können Sie Deadlock-Informationen über die `system_health`-Sitzung anzeigen, die standardmäßig immer aktiviert ist. Führen Sie die folgende Abfrage in SQL Server Management Studio aus:

```sql theme={null}
select
    e.xdata.value('(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]', 'datetime')   as lasttranstarted,
    e.xdata.value('(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]', 'nvarchar(max)')  as objectname,
    e.xdata.value('(/event/data/value/deadlock/process-list/process/@clientapp)[1]', 'nvarchar(256)')    as client_app,
    e.xdata.value('(/event/data/value/deadlock/process-list/process/@hostname)[1]', 'nvarchar(256)')     as hostname,
    e.xdata.value('(/event/data/value/deadlock/process-list/process/@loginname)[1]', 'nvarchar(256)')    as loginname,
    e.xdata.value('(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]', 'nvarchar(256)')   as indexname,
    e.xdata.value('(/event/data/value/deadlock/process-list/process/@waittime)[1]', 'int')               as waittime,
    e.xdata.value('(/event/data/value/deadlock/resource-list/keylock/@mode)[1]', 'nvarchar(10)')         as lockmode,
    e.xdata.query('(/event/data/value/deadlock)[1]')                                                     as deadlock_graph
from sys.fn_xe_file_target_read_file('system_health*.xel', null, null, null) as f
cross apply (select cast(f.event_data as xml)) as e(xdata)
where object_name = N'xml_deadlock_report';
```

<div id="in-azure">
  ### In Azure
</div>

In Azure gibt es standardmäßig eine separate Sitzung, die im Blobspeicher gespeichert wird. Um sie anzuzeigen, führen Sie die folgende Abfrage im Masterkontext aus:

```sql theme={null}
select
    f.file_name,
    xdata.value('(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]', 'datetime')   as lasttranstarted,
    xdata.value('(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]', 'nvarchar(max)')  as objectname,
    xdata.value('(/event/data/value/deadlock/process-list/process/@clientapp)[1]', 'nvarchar(256)')    as client_app,
    xdata.value('(/event/data/value/deadlock/process-list/process/@hostname)[1]', 'nvarchar(256)')     as hostname,
    xdata.value('(/event/data/value/deadlock/process-list/process/@loginname)[1]', 'nvarchar(256)')    as loginname,
    xdata.value('(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]', 'nvarchar(256)')   as indexname,
    xdata.value('(/event/data/value/deadlock/process-list/process/@waittime)[1]', 'int')               as waittime,
    xdata.value('(/event/data/value/deadlock/resource-list/keylock/@mode)[1]', 'nvarchar(10)')         as lockmode,
    xdata.query('(/event/data/value/deadlock)[1]')                                                     as deadlock_graph
from sys.fn_xe_telemetry_blob_target_read_file('dl', null, null, null) as f
cross apply (select cast(f.event_data as xml)) as e(xdata);
```

Nachdem Sie die Abfrage ausgeführt haben, wenden Sie sich an den technischen Support und übermitteln Sie die Deadlock-Informationen aus dem Abfrageergebnis.
