2017-01-04 56 views
0

我的預定作業每天工作6次。 有時候它的失敗原因是死鎖。我試圖找出誰阻塞我的會議。SQL Server死鎖

我搜索了,我發現sql分析器,但它沒有顯示確切的結果。如何用T-SQL或其他方式識別歷史?

當失敗所示作業錯誤消息belown,

交易(進程id)被死鎖的鎖資源與另一個過程和已被選作死鎖犧牲品。重新運行交易。

回答

0

這將有助於確定死鎖受害者或死鎖的原因:https://ask.sqlservercentral.com/questions/5982/how-can-i-identify-all-processes-involved-in-a-dea.html

如果你想減少你的進程死鎖這裏的風險是一些戰略...

  • 嘗試插入/ UPDATE/DELETE表以相同的順序。例如。如果一個進程是這樣​​做的:

    BEGIN TRAN; UPDATE TableA; UPDATE TableB; COMMIT; 
    

,而另一個過程是這樣做的:

BEGIN TRAN; UPDATE TableB; UPDATE TableA; COMMIT; 

存在一種風險,即一個進程將死鎖等。完成時間越長,死鎖的風險就越高。 SQL Server將隨機選擇一個進程作爲「死鎖受害者」。

  • 儘量減少事務中涉及的代碼。即在您的BEGIN TRANSACTION和COMMIT TRANSACTION語句之間有更少的INSERT/UPDATE/DELETE代碼行
  • 如果可能的話,處理較小批次的數據。如果您正在處理大量行,請嘗試添加批處理,以便代碼在任何給定時間鎖定較小批次的數據。
+0

感謝您的解釋尼克。祝你有美好的一天。 – Oracsql

+0

不客氣! –