2011-06-09 149 views
3

我記錄了ASP.NET應用程序拋出的異常。「死鎖受害者」在交易中,如何改變優先權?

消息:事務(進程ID 56) 在鎖上死鎖了|通訊 緩衝區資源與另一個進程 並已被選爲死鎖 受害者。重新運行交易。

我確定它的原因是我直接在SSMS中在同一時間在應用程序中查詢的表中運行selects

所以現在我的問題是:

  • 我可以改變優先級SQL-Server選擇 「僵局受害者」?我想選擇「我自己」(SSMS)作爲死鎖受害者,而不是ASP.NET,因爲它是一個時間關鍵型應用程序,對於我來說重新運行手動查詢比讓用戶接受錯誤更容易。

在此先感謝您。

回答

5

SET DEADLOCK_PRIORITY讓您微調優先

您可以在SSMS會話指定此(每查詢窗口),或全局:

Tools..Options..etc

+0

謝謝。這意味着我可以將其更改爲「Low」以降低SSMS查詢的優先級?這對我有用。是否有其他選擇來優化死鎖優先級?我讀過SQL-Server在默認情況下回滾事務時選擇死鎖受害者。那是對的嗎? – 2011-06-09 08:56:00

+0

@Tim Schmelter:對於SSMS查詢的「低」。沒有其他選項。按照上面的鏈接,受害者可以選擇最少的資源來回滾:「如果兩個會話具有相同的死鎖優先級,則SQL Server實例會選擇會以死鎖犧牲品的形式回滾的會話,並且成本較低。」乾杯 – gbn 2011-06-09 09:46:22

+0

在MS Dynamics NAV的詛咒不要讓它在C/AL代碼中被改變。如果它在用戶和無人蔘與進程之間(可以在失敗時重試),我寧願無人蔘與的進程「失去」。 – 2013-04-25 19:48:06