我们的.net应用程序被大约一百人左右使用,在SQL框上产生了大量的死锁和超时。我们正在努力找出原因。我们已经 - 检查了所有的索引,它们现在和它们一样好,一些主要的表格太宽,并且有一些愚蠢的触发器,但是现在我们无能为力。
对于尝试多次的相同用户来说,很多pids似乎是相同的......例如..
用户:user1时间:09:21错误消息:事务(进程ID 76)在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行该交易。
用户:user1时间:09:22错误消息:事务(进程ID 76)在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行该交易。
等..当我们将数据库移动到新框时,它从旧版本备份并恢复到新版...
如果有人对我们可以做的事情有任何建议,我会给他们买多品脱
感谢
NAT
答案 0 :(得分:3)
死锁不一定需要高负载。它们往往是设计问题的副产品,在哪些流程锁定数据的顺序,持续时间等等。
SQL分析器(2008 article here)有一些有用的功能可以帮助您跟踪&分析死锁。我建议这是最好的起点。如果你很幸运,你会发现只有一两个罪魁祸首,你可以轻松地删除交易,或者减少他们的寿命,以缓解这种情况。