SQL Server 2008 có nhiều cách để xác định các quy trình và truy vấn liên quan đến bế tắc.
-
Nếu deadlock dễ tái tạo, tần suất cao hơn và bạn có thể cấu hình máy chủ SQL (bạn có quyền truy cập và chi phí hiệu suất trên máy chủ khi trình cấu hình được bật) bằng cách sử dụng SQL Profiler sẽ cung cấp cho bạn cái nhìn đồ họa đẹp mắt về deadlock. Trang này có tất cả thông tin bạn cần sử dụng biểu đồ bế tắc http://sqlmag.com/ cơ sở dữ liệu-hiệu suất-điều chỉnh / thu thập-deadlock-information-deadlock-graph
-
Hầu hết các lần tái tạo deadlock là khó hoặc chúng xảy ra trong môi trường sản xuất mà chúng tôi không muốn gắn Profiler vào nó và ảnh hưởng đến hiệu suất.
Tôi sẽ sử dụng truy vấn này để giải quyết các trường hợp bế tắc đã xảy ra:
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
Tôi sẽ KHÔNG đi theo hướng sử dụng (NOLOCK) để sửa lỗi bế tắc. Đó là độ dốc trơn trượt và ẩn chứa vấn đề ban đầu.