【发布时间】:2014-09-01 10:27:12
【问题描述】:
我使用 C# 编写了一个 windows 服务和单独的 windows 应用程序
由于某种原因,我不断收到以下错误。
运行了很长时间,现在出现这个错误。
“CustomSQL 执行期间的 SQL 异常:事务(进程 ID 119) 与另一个进程在锁定资源上死锁并且一直 被选为死锁受害者。重新运行事务。 "
我知道其他服务也在访问数据库中的同一个表。他们已经存在了很长一段时间,即几个月,从未见过这个错误。
如何解决错误以准确找到导致此错误的原因?
谢谢
【问题讨论】:
-
您的其他语句是否有一个他们忘记提交/回滚的悬空事务?
-
设置一个记录死锁的数据库分析器 - 然后你可以看到哪些进程发生冲突,然后调试回你的代码
-
确保如果有多个 proc/statement 访问同一个表,则它们以相同的顺序连接。此外,如果您不太担心在另一个语句中更改数据,您可以在连接中使用“with nolock”。正如艾伦所说,我知道捕捉它的唯一方法是使用分析器,但如果它不经常发生,它可能不会捕捉到它!