DBAtlas · Atlas d'exploitation des bases de données

Lire les interblocages passés depuis la session system_health (deadlock graph)

SQL ServerPerformances

Commande

SET QUOTED_IDENTIFIER ON;  -- required for XML methods (sqlcmd/Agent default is OFF)
WITH dl AS (
    SELECT CAST(event_data AS XML) AS x
    FROM   sys.fn_xe_file_target_read_file(N'system_health*.xel', NULL, NULL, NULL)
    WHERE  object_name = N'xml_deadlock_report'
)
SELECT TOP (20)
       x.value('(event/@timestamp)[1]', 'datetime2')                                          AS utc_time,
       x.value('(event/data/value/deadlock/victim-list/victimProcess/@id)[1]', 'varchar(50)')  AS victim,
       x.value('count(event/data/value/deadlock/process-list/process)', 'int')                 AS process_count,
       x.value('(event/data/value/deadlock/process-list/process/@currentdbname)[1]', 'sysname') AS db,
       x.query('event/data/value/deadlock')                                                    AS deadlock_graph
FROM   dl
ORDER BY utc_time DESC;

Ce que fait la commande

Lit les événements xml_deadlock_report depuis la cible event_file de la session Extended Events system_health (active par défaut) ; pour chaque interblocage, renvoie l'heure (UTC), le processus victime, le nombre de participants, la base et le XML complet du deadlock graph.

Quand l'utiliser

Quand l'application signale l'erreur 1205, lors de l'analyse de la fréquence des interblocages et des objets impliqués ; sur les serveurs sans trace flag 1222.

Attention

Les fichiers system_health tournent ; sur un serveur chargé, les anciens interblocages peuvent avoir disparu, mettez donc en place une session XE dédiée pour un archivage permanent. La lecture de nombreux fichiers coûte du CPU ; gardez TOP pendant les heures ouvrées. Les événements sont écrits avec un délai, un nouvel interblocage apparaît donc après quelques secondes. Lecture seule ; sûr.

Ouvrir dans DBAtlas →

Voir aussi