SQL Server 2008 има множество начини за идентифициране на процеси и заявки, включени в блокиране.
-
Ако блокиранията са лесни за възпроизвеждане, честотата е по-висока и можете да профилирате SQL сървър (имате разходите за достъп и производителност на сървъра, когато профилировачът е активиран), използването на SQL Profiler ще ви даде хубав графичен изглед на блокиране. Тази страница съдържа цялата информация, която необходимост от използване на графики за блокиранеhttp://sqlmag.com/ database-performance-tuning/gathering-deadlock-information-deadlock-graph
-
В повечето случаи възпроизвеждането на задънени блокировки е трудно или те се случват в производствена среда, където не искаме да прикачваме Profiler към него и да повлияем на производителността.
Бих използвал тази заявка, за да получа блокирания:
SELECT
xed.value('@timestamp', 'datetime') as Creation_Date,
xed.query('.') AS Extend_Event
FROM
(
SELECT CAST([target_data] AS XML) AS Target_Data
FROM sys.dm_xe_session_targets AS xt
INNER JOIN sys.dm_xe_sessions AS xs
ON xs.address = xt.event_session_address
WHERE xs.name = N'system_health'
AND xt.target_name = N'ring_buffer'
) AS XML_Data
CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xed)
ORDER BY Creation_Date DESC
НЕ бих тръгнал към използване на (NOLOCK) за коригиране на задънени блокировки. Това е хлъзгав наклон и крие първоначалния проблем.