गतिरोध की जानकारी system_health
. द्वारा कैप्चर की जाती है विस्तारित ईवेंट डिफ़ॉल्ट रूप से ट्रेस होते हैं। अतिरिक्त ट्रेस फ़्लैग चालू करने की आवश्यकता नहीं है।
xml_deadlock
. से जानकारी ईवेंट को SSMS ऑब्जेक्ट एक्सप्लोरर (प्रबंधन-->विस्तारित ईवेंट-->Session--system_health) या T-SQL से देखा जा सकता है। फ़ाइल लक्ष्य से डेडलॉक xml प्राप्त करने के लिए नीचे एक उदाहरण क्वेरी है। आप एक xdl
. के साथ एक फ़ाइल में डेडलॉक xml भी सहेज सकते हैं गतिरोध के चित्रमय दृश्य के लिए SSMS में विस्तार और फ़ाइल खोलें।
--get xml_deadlock_report from system_health session file target
WITH
--get full path to current system_health trace file
CurrentSystemHealthTraceFile AS (
SELECT CAST(target_data AS xml).value('(/EventFileTarget/File/@name)[1]', 'varchar(255)') AS FileName
FROM sys.dm_xe_session_targets
WHERE
target_name = 'event_file'
AND CAST(target_data AS xml).value('(/EventFileTarget/File/@name)[1]', 'varchar(255)') LIKE '%\system[_]health%'
)
--get trace folder name and add base name of system_health trace file with wildcard
, BaseSystemHealthFileName AS (
SELECT
REVERSE(SUBSTRING(REVERSE(FileName), CHARINDEX(N'\', REVERSE(FileName)), 255)) + N'system_health*.xel' AS FileNamePattern
FROM CurrentSystemHealthTraceFile
)
--get xml_deadlock_report events from all system_health trace files
, DeadLockReports AS (
SELECT CAST(event_data AS xml) AS event_data
FROM BaseSystemHealthFileName
CROSS APPLY sys.fn_xe_file_target_read_file ( FileNamePattern, NULL, NULL, NULL) AS xed
WHERE xed.object_name like 'xml_deadlock_report'
)
--display 10 most recent deadlocks
SELECT TOP 10
DATEADD(hour, DATEDIFF(hour, SYSUTCDATETIME(), SYSDATETIME()), event_data.value('(/event/@timestamp)[1]', 'datetime2')) AS LocalTime
, event_data AS DeadlockReport
FROM DeadLockReports
ORDER BY LocalTime ASC;