SQL Server死鎖問題:事務(進程 ID x)與另外一個進程被死鎖在 鎖 | 通訊緩衝區資源上而且已被選做死鎖犧牲品。請從新運行該事務。

### The error occurred while setting parameters
### SQL: update ERP_SCjh_zzc_pl set IF_TONGBU=1 where (IF_TONGBU=0 or IF_TONGBU is null) and djno=? and djlb=?
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 事務(進程 ID 191)與另外一個進程被死鎖在 鎖 | 通訊緩衝區 資源上,而且已被選做死鎖犧牲品。請從新運行該事務。
; SQL []; 事務(進程 ID 191)與另外一個進程被死鎖在 鎖 | 通訊緩衝區 資源上,而且已被選做死鎖犧牲品。請從新運行該事務。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 事務(進程 ID 191)與另外一個進程被死鎖在 鎖 | 通訊緩衝區 資源上,而且已被選做死鎖犧牲品。請從新運行該事務。
[2019-08-24 17:26:52,077] [qtp1891502635-26] [ERROR] [ExceptionController.java:26] ==>Exception Msg:html

 

 

感受這篇文章寫的不錯,讀了三遍不是太明白,記錄下來:
https://www.cnblogs.com/happyhippy/archive/2008/11/14/1333922.htmljava

解決辦法:sql

    1. SQLServer自動選擇一條SQL做死鎖的犧牲品;
    2. 按同一順序訪問對象;
    3. SELECT語句加with (onlock)提示;
    4. 使用較低的隔離級別
    5. 在SQL前加SET LOCK_TIMEOUT timeout_period,當請求鎖超過設定的timeout_period時間後,就會終止當前SQL的執行
    6. 使用基於行版本控制的隔離級別
    7. 使用綁定鏈接

鎖相關:https://www.cnblogs.com/wynn0123/p/4633776.htmlapp

相關文章
相關標籤/搜索