kid*_*dgu 2 c# sql asp.net sql-server-2008
我正在使用MS-SQL 2008并在Web项目中使用C#进行编码.
目前,我陷入了sql死锁.
我有2个交易,其中两个是长期交易.
当两个事务同时运行时,会发生死锁,并且将选择短事务自动终止.
我的当前解决方案,我正在捕捉死锁的异常并重做短事务,它运行良好,只需要一些时间.
但是,我想知道是否有任何解决方案可以避免根本原因造成的死锁?
不,你不能完全避免死锁,只能缓解它们.
使用RCSI隔离模式.这基本上是MVCC,但你必须要注意SQL Server 仍然会使用ANSI ACID模式(DBA.SE答案).此模式会阻止编写器阻止读取器,但不会帮助编写器 - 编写器相互阻塞.
客户端重试逻辑.经典的方式
尝试以相同的顺序进行表更新,例如T1 - > T2
避免长时间交易:例如,客户端轮流绊倒并保持交易开放.您可以使用存储过程,更好的索引或简单地调整查询来缓解这种情况