SQL Server 2008 má několik způsobů, jak identifikovat procesy a dotazy zapojené do uváznutí.
-
Pokud jsou uváznutí snadno reprodukovatelná, frekvence je vyšší a můžete profilovat SQL server (pokud je povolen profiler, máte přístup a náklady na výkon na serveru) pomocí SQL Profiler vám poskytne pěkné grafické zobrazení uváznutí. Tato stránka obsahuje všechny informace, které potřeba použít grafy uváznutíhttp://sqlmag.com/ Database-performance-tuning/gathering-deadlock-information-deadlock-graph
-
Reprodukce zablokování je většinou obtížná nebo k nim dochází v produkčním prostředí, kde k němu nechceme připojit Profiler a ovlivnit výkon.
Tento dotaz bych použil k tomu, aby došlo k uváznutí:
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
Nešel bych směrem k použití (NOLOCK) k opravě zablokování. To je kluzký svah a skrývání původního problému.