事务(进程 ID 120)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务
Posted
技术标签:
【中文标题】事务(进程 ID 120)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务【英文标题】:Transaction (Process ID 120) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction 【发布时间】:2016-07-27 16:32:03 【问题描述】:在我们的组织中,有一个用 c# 构建的旧桌面应用程序,它连接 sql server db。 它从 2008 年开始运行。 现在突然出现错误
Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction
这可以在代码级别解决,这是我从其他类似帖子中得到的。这里的问题是我没有应用程序的源代码,但我可以访问数据库。这可以在 Db 级别解决吗? SQl Server 2005 中可以防止此错误的任何设置。
【问题讨论】:
【参考方案1】:是的,这可以在数据库级别解决。首先,您需要启用一些跟踪标志以在再次发生这种情况时捕获它。..
启用下面的跟踪标志使 SQL Server 将死锁信息写入错误日志
DBCC TRACEON (1204, -1)
DBCC TRACEON (1222, -1)
【讨论】:
【参考方案2】:就“设置”而言,如果您无法访问代码以查看和/或重新编写代码,这可能会很困难。没有神奇的按钮可以消除或阻止死锁,有一些事情可以尝试缓解它们。我会找出导致死锁问题的确切代码片段。除了上面提到的 TheGameiswar 之外,如果您知道发生这种情况的一小段时间,那么您也可以运行 Profiler。一旦您确定了导致死锁的对象,请仔细查看正在执行的表和存储过程,并尝试进行任何改进(索引和统计信息等)。还有一些其他实用程序可以运行,这可能会有所帮助; sp_Blitz、sp_BlitzIndex、sp_BlitzCache 和 sp_WhoIsActive 是我经常用于解决性能和死锁/阻塞问题的东西。
【讨论】:
以上是关于事务(进程 ID 120)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务的主要内容,如果未能解决你的问题,请参考以下文章
事务 ( 进程 ID 60) 与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行 该事务。
SqlException 事务(进程 ID 159)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
SqlException 事务(进程 ID 159)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。