8

我经常收到此错误,但在生产环境中的应用程序中的 2 页上并不一致。我只有以下错误的一些屏幕截图。

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

解决此错误的方法应该是什么。数据库服务器是 SQL Server 2005。

4

5 回答 5

5

这是关于死锁故障排除的圣经:

http://blogs.msdn.com/bartd/archive/2006/09/09/Deadlock-Troubleshooting_2C00_-Part-1.aspx

于 2009-01-15T15:06:40.783 回答
3

Brad McGehee 的这篇文章是一个很好的起点。

于 2009-01-15T15:03:13.960 回答
3

另请参阅:主动死锁通知

于 2009-01-15T15:10:25.177 回答
2

您需要在发生错误时运行死锁配置文件跟踪。Brad McGehee的文章是一个概述。您需要确定这两个有问题的进程。之后,查看两页中的代码,了解发出了哪些 SQL 命令以及发出的频率。大多数时候,我发现只需查看正在运行的 SQL 代码并了解它的运行频率即可快速识别冲突。修复它有时需要更长的时间...

于 2009-01-15T15:23:14.713 回答
1

您可以按照错误消息的建议进行操作,并让程序重试事务!

很大程度上取决于事务的“原子”程度!即,如果您陷入僵局,则其他进程可能已成功更新您感兴趣的行。在 htese 情况下将更新应用于该行是否仍然有意义?

至少向用户显示一个更好的错误消息(“另一个用户更改了您尝试更新的 xxxx。请检查新值并重试。)

于 2009-01-15T15:14:14.700 回答