在后台作业中捕获死锁事件?

ask*_*otl 0 sql-server deadlock sql-server-2014

我目前正在使用分析器捕获死锁事件。(死锁,死锁图,死锁链)。

到目前为止一切顺利,但为此,客户端计算机需要不断运行和在线。

==> 有没有办法直接在 SQL Server 上捕获和收集死锁事件作为后台作业?

Dan*_*man 6

死锁事件由 system_health 扩展事件跟踪捕获,因此您无需以交互方式运行 Profiler 或创建 SQL 跟踪来捕获信息。

以下是从文件目标检索死锁信息的示例查询:

--Get xml_deadlock_report events from system_health session file target
WITH
      --get trace folder path and append session name with wildcard (assumes base file name is same as session name)
      all_trace_files AS (
        SELECT path + '\system_health*.xel' AS FileNamePattern
        FROM sys.dm_os_server_diagnostics_log_configurations
        )
      --get xml_deadlock_report events from all system_health trace files
    , deadlock_reports AS (
        SELECT CAST(event_data AS xml) AS deadlock_report_xml
        FROM all_trace_files
        CROSS APPLY sys.fn_xe_file_target_read_file ( FileNamePattern, NULL, NULL, NULL) AS trace_records
        WHERE trace_records.object_name like 'xml_deadlock_report'
    )
SELECT TOP 10
      deadlock_report_xml.value('(/event/@timestamp)[1]', 'datetime2') AS UtcTimestamp
    , deadlock_report_xml AS DeadlockReportXml
FROM deadlock_reports;
Run Code Online (Sandbox Code Playgroud)