gpt4 book ai didi

sql-server-2008 - 通过使用NOLOCK提示避免死锁

转载 作者:行者123 更新时间:2023-12-04 04:00:17 25 4
gpt4 key购买 nike

有时我会在生产环境中遇到以下错误,该错误在再次运行相同的存储过程时消失了。

Transaction (Process ID 86) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction



有人告诉我,如果我在存储过程中使用NOLOCK提示,它将确保它永远不会死锁。这样对吗?有没有更好的方法来处理此错误?

最佳答案

RDBMS上偶尔会出现死锁,例如SQL Server/Sybase。

您可以在客户端上进行编码,以按照我的MSDN "Handling Deadlocks"的建议重试。
基本上,检查一下SQLException,也许半秒钟后再试一次。

否则,您应该检查您的代码,以便对表的所有访问都以相同的顺序进行。或者,您可以使用SET DEADLOCK_PRIORITY来控制谁成为受害者。

在用于SQL Server的MSDN上,有"Minimizing Deadlocks"开始

Although deadlocks cannot be completely avoided



这也提到了我不喜欢的“使用较低的隔离级别”(与SO上的许多SQL类型相同),这是您的问题。不这样做是答案... :-)
  • What can happen as a result of using (nolock) on every SELECT in SQL Server?
  • https://dba.stackexchange.com/q/2684/630

  • 注意: MVCC类型RDBMS(Oracle,Postgres)没有此问题。参见 http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioningMVCC has other issues.

    关于sql-server-2008 - 通过使用NOLOCK提示避免死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629682/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com