Tuesday, August 4, 2026

.::: Check xml_deadlock_report offline & online :::.

 

correlation deadlock 

https://teguhth.blogspot.com/2026/03/simalation-locking-blocking-deadlock-in.html
https://teguhth.blogspot.com/2021/09/sql-server-how-to-simulate-and-catch.html

1. check targent data  event_file


SELECT create_time,target_name,name,session_source,
    CAST(xt.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets xt
JOIN sys.dm_xe_sessions xs
ON xs.address = xt.event_session_address
WHERE xs.name='system_health'
AND xt.target_name='event_file';

output 

<EventFileTarget truncated="0">
  <Buffers logged="4" dropped="0" />
  <File name="C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\system_health_0_134303098936130000.xel" />
</EventFileTarget>
 


2. check xml deadlock

SELECT
    object_name,
    file_name,
    timestamp_utc,
    CAST(event_data AS XML) AS EventData
FROM sys.fn_xe_file_target_read_file
(
    N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\system_health*.xel',
    NULL,
    NULL,
    NULL
)
WHERE object_name = 'xml_deadlock_report'
ORDER BY timestamp_utc DESC;

gmt +7 

SELECT
    object_name,
    file_name,

    CONVERT(datetime2(3), DATEADD(HOUR, 7, timestamp_utc)) AS Date_Jakarta,

    CAST(event_data AS XML) AS EventData

FROM sys.fn_xe_file_target_read_file
(
    N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\system_health*.xel',
    NULL,
    NULL,
    NULL
)
WHERE object_name = 'xml_deadlock_report'
ORDER BY Date_Jakarta DESC;
 

3. read even_data.xml xml_deadlock_report

DECLARE @FileName NVARCHAR(260) = 'C:\backup\EventData_teguhth.xml';
DECLARE @OnlyFileName NVARCHAR(260);
DECLARE @SQL NVARCHAR(MAX);

-- Ambil nama file saja
SET @OnlyFileName =
RIGHT(@FileName, CHARINDEX('\', REVERSE(@FileName)) - 1);

SET @SQL = N'
DECLARE @x XML;

SELECT @x = BulkColumn
FROM OPENROWSET
(
    BULK ''' + @FileName + ''',
    SINGLE_BLOB
) AS A;

SELECT DISTINCT

    ''' + @OnlyFileName + ''' AS FileName,

    P.value(''@spid'',''int'') AS SPID,

    P.value(''@loginname'',''nvarchar(256)'') AS LoginName,

    DB_NAME(P.value(''@currentdb'',''int'')) AS DatabaseName,

    (
        SELECT TOP (1)
            R.value(''@objectname'',''nvarchar(300)'')
        FROM @x.nodes(''/event/data/value/deadlock/resource-list/*'') X(R)
    ) AS ObjectName,

    CASE
        WHEN EXISTS
        (
            SELECT 1
            FROM @x.nodes(''/event/data/value/deadlock/victim-list/victimProcess'') V(X)
            WHERE V.X.value(''@id'',''varchar(100)'')
                  =
                  P.value(''@id'',''varchar(100)'')
        )
        THEN ''Korban''
        ELSE ''Bukan Korban''
    END AS StatusDeadlock,

    P.value(''(inputbuf/text())[1]'',''nvarchar(max)'') AS DeadlockQuery

FROM @x.nodes(''/event/data/value/deadlock/process-list/process'') T(P)

ORDER BY SPID;
';

EXEC sp_executesql @SQL;


No comments:

Post a Comment

Popular Posts