C# 如何避免sql死锁?
我在使用MS-SQL 2008,在一个web项目中使用C#进行编码 目前,我陷入了sql死锁 我有两个事务,其中一个是长事务 当两个事务同时运行时,将发生死锁,并选择自动终止短事务 我目前的解决方案是捕获死锁异常并重做短事务,它运行良好,只是需要一些时间C# 如何避免sql死锁?,c#,asp.net,sql,sql-server-2008,C#,Asp.net,Sql,Sql Server 2008,我在使用MS-SQL 2008,在一个web项目中使用C#进行编码 目前,我陷入了sql死锁 我有两个事务,其中一个是长事务 当两个事务同时运行时,将发生死锁,并选择自动终止短事务 我目前的解决方案是捕获死锁异常并重做短事务,它运行良好,只是需要一些时间 但是,我想知道是否有任何解决方案可以从根本上避免死锁?不,你不能完全避免死锁,只能减轻它们 使用隔离模式。这基本上是正确的,但您必须注意SQL Server会这样做(DBA.SE答案)。此模式停止写入程序阻塞读卡器,但无助于写入程序-写入程序
但是,我想知道是否有任何解决方案可以从根本上避免死锁?不,你不能完全避免死锁,只能减轻它们
- 使用隔离模式。这基本上是正确的,但您必须注意SQL Server会这样做(DBA.SE答案)。此模式停止写入程序阻塞读卡器,但无助于写入程序-写入程序相互阻塞
- 客户端重试逻辑。经典的方式
- 尝试以相同的顺序进行表更新,例如T1->T2始终
- 避免长事务:例如,客户机经常往返并保持事务的开放性。您可以通过存储过程、更好的索引或简单地调优查询来缓解这一问题