事务(进程 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

在我们的组织中,有一个用 c# 构建的旧桌面应用程序,它连接 sql 服务器数据库。 自 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 中可以防止此错误的任何设置。

是的,这可以在数据库中解决 level.First 您需要启用一些跟踪标志以在再次发生时捕获此问题..

启用以下跟踪标志会使 SQL 服务器将死锁信息写入错误日志

DBCC TRACEON (1204, -1)
DBCC TRACEON (1222, -1)

就 "settings" 而言,如果您无法访问代码以查看 and/or 重写代码,这可能会很困难。没有神奇的按钮可以消除或防止死锁,有一些方法可以尝试缓解死锁。我会找出导致死锁问题的确切代码片段。除了上面提到的 TheGameiswar 之外,如果您知道发生这种情况的时间范围很短,那么您还可以 运行 Profiler。一旦确定了导致死锁的对象,请仔细查看正在执行的表和存储过程,并尝试进行任何改进(索引和统计信息等)。 运行 还有一些其他实用程序可能会有所帮助; sp_Blitz、sp_Blitz索引、sp_Blitz缓存和sp_WhoIsActive是我经常使用的性能和deadlocking/blocking问题。