> ## 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.

# Interblocages de base de données

> Journalisez et analysez les interblocages de base de données SQL dans ABBYY FlexiCapture à l’aide de sessions Extended Events, avec des exemples de requêtes pour XEvents et la session system_health.

Si des interblocages de base de données SQL surviennent pendant l’utilisation du programme, activez la journalisation des informations sur les interblocages à l’aide du système Extended Events.

<div id="create-an-xevents-session">
  ## Créer une session XEvents
</div>

Créez la session à l’aide de l’assistant SQL Server Management Studio :

1. Lancez le New Session Wizard depuis l’Object Explorer, sous **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="Capture d’écran de SQL Server Management Studio lançant le New Session Wizard depuis l’Object Explorer, sous Management, Extended Events, Sessions." width="278" height="300" data-path="images/flexi-capture/TG_Communication_DeadLock_1.png" />
   </Frame>
2. Indiquez un nom pour votre session. Pour la démarrer au lancement du serveur, sélectionnez l’option **Start the event session at server startup**.

   <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="Capture d’écran du New Session Wizard avec un nom de session saisi et l’option Start the event session at server startup sélectionnée." width="716" height="333" data-path="images/flexi-capture/TG_Communication_DeadLock_2.png" />
   </Frame>
3. Dans la section **Select Events To Capture**, recherchez `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="Capture d’écran de l’étape Select Events To Capture du New Session Wizard avec xml_deadlock_report sélectionné." width="866" height="572" data-path="images/flexi-capture/TG_Communication_DeadLock_3.png" />
   </Frame>
4. Dans la section **Specify Session Data Storage**, indiquez le chemin de l’emplacement où est stocké le fichier contenant les résultats enregistrés de la session. L’option **Enable file rollover** active la rotation automatique dans le répertoire spécifié.
5. Dans la section **Résumé**, vous pouvez ouvrir et enregistrer les résultats de la session de l’assistant en T-SQL.

<div id="view-deadlock-information">
  ## Afficher les informations sur l’interblocage
</div>

<div id="from-the-xevents-session">
  ### À partir de la session XEvents
</div>

Pour lire les fichiers `.xel`, SQL Server fournit la fonction table `sys.fn_xe_file_target_read_file`. Exécutez la requête suivante dans SQL Server Management Studio en spécifiant le chemin d’accès aux fichiers de trace :

```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  -- caractère générique (deadlocks*.xel)
cross apply (select cast(f.event_data as xml)) as e(xdata);
```

<div id="from-the-system_health-session">
  ### À partir de la session system\_health
</div>

Si la journalisation des interblocages n’est pas activée, vous pouvez consulter les informations sur les interblocages à l’aide de la session `system_health`, qui est toujours activée par défaut. Exécutez la requête suivante dans SQL Server Management Studio :

```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">
  ### Dans Azure
</div>

Azure dispose d’une session distincte, collectée par défaut dans le stockage blob. Pour l’afficher, exécutez la requête ci-dessous dans le contexte master :

```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);
```

Après avoir exécuté la requête, contactez le support technique et fournissez les informations sur l’interblocage figurant dans les résultats.
