Lire les interblocages passés depuis la session system_health (deadlock graph)
SQL ServerPerformancesCommande
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.