Sql-Server
您應該執行哪些查詢來調試導致死鎖的儲存過程以及我應該在 MSSQL 上查看哪一行?
您應該執行哪些查詢來調試導致死鎖的儲存過程以及我應該在 MSSQL 上查看哪一行?我正在嘗試修復 MSSQL 上反復出現的死鎖。問題是我不確定應該執行哪些查詢來獲取所需的所有資訊。
您可以將程式碼添加到儲存過程,以便在每個步驟開始和完成時將進度輸出到消息視窗。
DECLARE @strStatus VARCHAR(200); SET @strStatus = CONVERT(VARCHAR(30), GETDATE()) + ' Starting sp1...'; RAISERROR (@strStatus, 10, 1) WITH NOWAIT; EXEC sp1 SET @strStatus = CONVERT(VARCHAR(30), GETDATE()) + ' Finished sp1...'; RAISERROR (@strStatus, 10, 1) WITH NOWAIT;
有多種方法可以擷取死鎖細節,
- 以下跟踪標誌會將完整的死鎖詳細資訊寫入 SQL Server 錯誤日誌,
DBCC TRACEON (1204, -1) DBCC TRACEON (1222, -1)
- 設置擴展事件會話以擷取詳細資訊,
CREATE EVENT SESSION [Deadlock_Capture] ON SERVER ADD EVENT sqlos.scheduler_monitor_deadlock_ring_buffer_recorded, ADD EVENT sqlserver.lock_deadlock, ADD EVENT sqlserver.lock_deadlock_chain, ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.ring_buffer(SET max_events_limit=(10),max_memory=(131072)) WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON) GO
- 我最不喜歡的選項是使用 SQL Profiler,擷取這些事件類
Lock: Deadlock Chain
和Deadlock graph
.使用方法 1 和 2 你會看到像這裡這樣的死鎖資訊,
您可以在我用來模擬死鎖的任何一個文件中找到查詢。