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:

 

 

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

解決辦法:

    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.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM