## 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)
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.
/* 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;