Preskočiť na obsah
Skript

Deadlocky zo system_health – event_file (dlhšia história)

Deadlock grafy zo súborov .xel relácie system_health – siahajú ďalej do minulosti než ring_buffer. Cestu k súborom zistí skript sám.

deadlocky-zo-system-health-event-file-dlhsia-historia.sql 32 riadkov · T-SQL
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Deadlocky zo system_health – event_file (dlhšia história)
   Účel:  Deadlock grafy zo súborov .xel relácie system_health – siahajú ďalej do minulosti než ring_buffer. Cestu k súborom zistí skript sám.
   Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;

-- Cesta k .xel súborom system_health (ak sa nedá zistiť, použije sa default LOG adresár)
DECLARE @path nvarchar(260) =
(
    SELECT TOP (1) CAST(t.target_data AS xml).value('(EventFileTarget/File/@name)[1]', 'nvarchar(260)')
    FROM sys.dm_xe_session_targets AS t
    JOIN sys.dm_xe_sessions AS s ON s.address = t.event_session_address
    WHERE s.name = N'system_health' AND t.target_name = N'event_file'
);
SET @path = CASE WHEN @path IS NULL THEN N'system_health*.xel'
                 -- NCHAR(92) = spätné lomítko; vezmeme adresár aktuálneho súboru
                 ELSE LEFT(@path, LEN(@path) - CHARINDEX(NCHAR(92), REVERSE(@path)) + 1) + N'system_health*.xel'
            END;

SELECT TOP (50)
       x.ev.value('(@timestamp)[1]', 'datetime2(3)')                       AS event_time_utc,
       x.ev.query('(data[@name="xml_report"]/value/deadlock)[1]')          AS deadlock_graph,
       f.file_name
FROM
(
    SELECT CAST(event_data AS xml) AS event_xml, file_name
    FROM sys.fn_xe_file_target_read_file(@path, NULL, NULL, NULL)
    WHERE object_name = N'xml_deadlock_report'
) AS f
CROSS APPLY f.event_xml.nodes('/event') AS x(ev)
ORDER BY event_time_utc DESC;
## Kedy použiť

Aplikácia hlási chybu 1205 a deadlock už v `ring_buffer` nie je, alebo potrebuješ prehľad deadlockov za posledné dni.

## Ako čítať výsledok

`deadlock_graph` otvor kliknutím, ulož ako **.xdl** a otvor v SSMS – uvidíš graf s obeťou (preškrtnutý proces), procesmi a zdrojmi. Časy sú v **UTC**.

> [!WARNING]
> Čítanie všetkých .xel súborov môže na vyťaženom serveri chvíľu trvať. system_health drží obmedzený počet súborov (na 2016–2019 štandardne 4 × 5 MB, na 2022 viac), takže ani toto nie je úplná história – na audit si založ vlastnú XE session.

**Oprávnenia:** `VIEW SERVER STATE` (na SQL Server 2022 stačí aj `VIEW SERVER PERFORMANCE STATE`).  
**Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022

## Súvisiace recepty

- [Ako vytiahnuť a čítať deadlock graph](script.php?id=7&s=ako-vytiahnut-a-citat-deadlock-graph)