SQL Server 2005: 事务死锁

8

我在一个生产环境的应用程序中经常遇到这个错误,但不是在所有情况下都出现,只有2个页面会出现。以下是一些错误截图。

事务(进程ID XX)在与另一个进程通信缓冲区资源上发生死锁,并被选为死锁牺牲者。重新运行该事务。

如何解决这个错误?数据库服务器是 SQL Server 2005。

5个回答

5

你刚才不是用完全相同的答案回答了另一个问题吗?! :-) - Mitch Wheat
那是在九月份,你是在说这个吗?https://dev59.com/tkXRa4cB1Zd3GeqPoxnd - SQLMenace

3

Brad McGehee的这篇文章是一个很好的起点,关于如何使用SQL Server 2005 Profiler来追踪死锁。


3

请参阅这里:主动死锁通知


该链接提供了有关如何使用主动死锁通知的信息。

我不想显得消极,但在SQL Server 2005中使用分析器死锁事件通常是开始的地方,而不是跟踪标志。 - Mitch Wheat

2
您需要在出现错误时运行死锁分析跟踪。Brad McGehee的文章是一份概述。您需要确定两个有问题的进程。之后,请检查这两个页面中的代码,看看正在发出什么SQL命令以及频率如何。大多数情况下,我发现仅仅审查正在运行的SQL代码并知道其运行频率就可以快速识别冲突。修复它有时需要更长的时间...

1

你可以按照错误信息的建议,让程序重试交易!

但这非常取决于交易的“原子性”!也就是说,如果你被死锁了,很可能其他进程已经成功更新了你感兴趣的行。在这种情况下,将更新应用于该行是否仍然有意义呢?

至少要向用户提供更友好的错误信息(“另一个用户已更改您尝试更新的xxxx。请查看新值并重试。”)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接