如何避免sql死锁?

时间:2013-06-11 07:56:00

标签: c# asp.net sql sql-server-2008

我正在使用MS-SQL 2008并在网络项目中使用C#进行编码。

目前,我遇到了sql死锁问题。

我有2个交易,其中一个是长期交易。

当两个事务同时运行时,会发生死锁,并且会选择短事务自动终止。

My Current解决方案,我正在捕捉死锁的异常并重做短交易,它运行良好,只需要一些时间。

但是,我想知道是否有任何解决办法可以避免根本原因造成死锁?

1 个答案:

答案 0 :(得分:6)

不,你不能完全避免死锁,只能缓解死锁。

  • 使用RCSI隔离模式。这基本上是MVCC,但您必须要注意SQL Server将still use the ANSI ACID modes on occasion(DBA.SE回答)。此模式会阻止编写器阻止读取器,但不会帮助编写器 - 编写器相互阻塞。

  • 客户端重试逻辑。

  • 的经典方式
  • 尝试以相同的顺序进行表格更新,例如T1 - > T2总是

  • 避免长时间交易:例如,客户端轮流绊倒并保持交易开放。您可以使用存储过程,更好的索引或简单地调整查询来缓解此问题