SQL Server死锁问题:事务(进程 ID x)与另一个进程被死锁在 锁 | 通信缓冲区资源上并且已被选作死锁牺牲品。请重新运行该事务。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:

 

 

感觉这篇文章写的不错,读了三遍不是太明白,记录下来:​

解决办法:

  1. SQLServer自动选择一条SQL作死锁的牺牲品;
  2. 按同一顺序访问对象;
  3. SELECT语句加with (onlock)提示;
  4. 使用较低的隔离级别
  5. 在SQL前加SET LOCK_TIMEOUT timeout_period,当请求锁超过设定的timeout_period时间后,就会终止当前SQL的执行
  6. 使用基于行版本控制的隔离级别
  7. 使用绑定连接

 



以上是关于SQL Server死锁问题:事务(进程 ID x)与另一个进程被死锁在 锁 | 通信缓冲区资源上并且已被选作死锁牺牲品。请重新运行该事务。的主要内容,如果未能解决你的问题,请参考以下文章

什么是事务(进程 ID 116)死锁锁定?

列存储聚集索引 - 死锁问题 (SQL Server)

SQL Server 事务 (ID) 死锁

在 SQL Server 中检索一周前的死锁

减少SQL Server数据库死锁的技巧

事务 ( 进程 ID 60) 与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行 该事务。