Extraire les informations de deadlock

Comment extraire les informations de deadlock.

Les événements de deadlock se produisent lorsqu’il y a un blocage croisé entre deux ou plusieurs processus pour accéder aux mêmes ressources dans la base de données. Lorsqu’un deadlock se produit, SQL Server choisit l’un des processus comme victime et le tue, ce qui permet aux autres processus d’accéder aux ressources en conflit.

lorsqu’un deadlock se produit sur un serveur SQL Server, il faut diagnostiquer la raison du deadlock.

SQL Server produit un évènement lorsqu’un deadlock se produit et qu’une victime est choisie. Cet évènement est automatiquement stocké dans une session d’évènements (une trace, si vous préférez). L’information stockée s’appelle le deadlock graph, et il contient une représentation en XML de la situation. Il peut être affiché par SQL Server Management Studio (SSMS) sous forme de graphe.

Si vous récupérez ce deadlock graph, vous pouvez l’enregistrer dans un fichier avec l’extension .xdl. Ainsi, un double-clic sur ce fichier permettra d’ouvrir SSMS avec la vision graphique du deadlock graph.

system_health

La session d’événements étendus system_health est une fonctionnalité de Microsoft SQL Server qui surveille les événements système, y compris les événements de deadlock. Vous pouvez extraire le graph de deadlock à partir de cette session en suivant les étapes ci-dessous :

Exécutez la requête suivante pour extraire les évènements de deadlock de la session d’événements étendus system_health :

(la requête peut être longue, selon la quantité d’historique dans la session system_health. Laissez-la tourner, ce n’est pas grave, elle ne bloque pas les requêtes de production)

;WITH sh AS (
    SELECT 
        timestamp_utc,
        CAST(event_data AS XML) AS eventdata
    FROM sys.fn_xe_file_target_read_file('system_health*.xel', null, null, null)
    WHERE object_name = 'xml_deadlock_report'
)
SELECT TOP 100 
    CAST(timestamp_utc as datetime2(3)) as timestamp_utc,
    eventdata.query('(event/data/value/deadlock)[1]') AS DeadlockGraph
FROM sh
ORDER BY timestamp_utc DESC;

Vous pouvez cliquer sur un XML dans la colonne DeadlockGraph pour ouvrir une fenêtre avec le détail, et sauvegarde rle fichier avec l’extension .xdl.