DBAtlas · Veritabanı operasyon atlası

Geçmiş deadlock'ları system_health oturumundan oku (deadlock graph)

SQL ServerPerformans

Komut

SET QUOTED_IDENTIFIER ON;  -- XML metodlari icin gerekli (sqlcmd/Agent varsayilani OFF)
WITH dl AS (
    SELECT CAST(event_data AS XML) AS x
    FROM   sys.fn_xe_file_target_read_file(N'system_health*.xel', NULL, NULL, NULL)
    WHERE  object_name = N'xml_deadlock_report'
)
SELECT TOP (20)
       x.value('(event/@timestamp)[1]', 'datetime2')                                          AS utc_time,
       x.value('(event/data/value/deadlock/victim-list/victimProcess/@id)[1]', 'varchar(50)')  AS victim,
       x.value('count(event/data/value/deadlock/process-list/process)', 'int')                 AS process_count,
       x.value('(event/data/value/deadlock/process-list/process/@currentdbname)[1]', 'sysname') AS db,
       x.query('event/data/value/deadlock')                                                    AS deadlock_graph
FROM   dl
ORDER BY utc_time DESC;

Ne yapar?

Varsayılan açık gelen system_health Extended Events oturumunun event_file hedefinden xml_deadlock_report event'lerini okur; her deadlock için zaman (UTC), victim process, katılımcı sayısı, veritabanı ve tam deadlock graph XML'ini verir.

Ne zaman kullanılır?

Uygulama 1205 hatası raporladığında, deadlock sıklığını ve hangi nesnelerde yaşandığını analiz ederken; trace flag 1222 açık olmayan sunucularda.

Dikkat

system_health dosyaları rollover ile döner; yoğun sunucuda eski deadlock'lar silinmiş olabilir, kalıcı arşiv için ayrı XE oturumu kur. Dosya sayısı büyükse okuma CPU tüketir; mesai içinde TOP ile sınırla. Event dosyaya gecikmeli yazılır, yeni deadlock birkaç saniye sonra görünür. Sadece okuma; risksiz.

DBAtlas'ta aç →

İlgili