我经常收到此错误,但在生产环境中的应用程序中的 2 页上并不一致。我只有以下错误的一些屏幕截图。
事务(进程 ID XX)在锁上死锁 | 与另一个进程通信缓冲区资源,并已被选为死锁牺牲品。重新运行事务。
解决此错误的方法应该是什么。数据库服务器是 SQL Server 2005。
我经常收到此错误,但在生产环境中的应用程序中的 2 页上并不一致。我只有以下错误的一些屏幕截图。
事务(进程 ID XX)在锁上死锁 | 与另一个进程通信缓冲区资源,并已被选为死锁牺牲品。重新运行事务。
解决此错误的方法应该是什么。数据库服务器是 SQL Server 2005。
这是关于死锁故障排除的圣经:
http://blogs.msdn.com/bartd/archive/2006/09/09/Deadlock-Troubleshooting_2C00_-Part-1.aspx
Brad McGehee 的这篇文章是一个很好的起点。
另请参阅:主动死锁通知
您需要在发生错误时运行死锁配置文件跟踪。Brad McGehee的文章是一个概述。您需要确定这两个有问题的进程。之后,查看两页中的代码,了解发出了哪些 SQL 命令以及发出的频率。大多数时候,我发现只需查看正在运行的 SQL 代码并了解它的运行频率即可快速识别冲突。修复它有时需要更长的时间...
您可以按照错误消息的建议进行操作,并让程序重试事务!
很大程度上取决于事务的“原子”程度!即,如果您陷入僵局,则其他进程可能已成功更新您感兴趣的行。在 htese 情况下将更新应用于该行是否仍然有意义?
至少向用户显示一个更好的错误消息(“另一个用户更改了您尝试更新的 xxxx。请检查新值并重试。)