SQL Server 2008 ma wiele sposobów identyfikowania procesów i zapytań związanych z zakleszczeniem.
-
Jeśli zakleszczenia są łatwe do odtworzenia, częstotliwość jest wyższa i możesz profilować serwer SQL (masz dostęp i koszt wydajności na serwerze, gdy profiler jest włączony) przy użyciu programu SQL Profiler da ci ładny graficzny widok zakleszczenia. Ta strona zawiera wszystkie informacje, które trzeba użyć wykresów zakleszczeńhttp://sqlmag.com/ database-performance-tuning/gathering-deadlock-information-deadlock-graph
-
W większości przypadków odtworzenie zakleszczeń jest trudne lub zdarzają się w środowisku produkcyjnym, w którym nie chcemy dołączać do niego Profilera i wpływać na wydajność.
Użyję tego zapytania, aby uzyskać zakleszczenie:
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
NIE poszedłbym w kierunku używania (NOLOCK) do naprawiania zakleszczeń. To jest śliskie zbocze i ukrywanie pierwotnego problemu.