需要死锁帮助

时间:2010-10-23 17:14:17

标签: c# .net sql database-deadlocks database-concurrency

我有一种奇怪的情况。我有不断访问代码的不同部分和数千个客户端的表,因此我们在对表进行简单更新和插入时使用了事务。问题是我们一直遇到死锁错误。任何人都知道如何缓解这个问题?

2 个答案:

答案 0 :(得分:4)

这个问题并不是特别的 - 当开发人员对锁定的工作方式知之甚少时,通常会将交易视为“黑匣子”,并希望他们的解决方案能够扩展。

Mitch在关于支付专家费用的评论中是正确的 - 这对于SO上的任何解决方案而言都是一个太大的问题。您将需要配备导致死锁的查询痕迹,并且您将不得不分析从索引到表设计,事务隔离级别以及查询模式的所有内容。

我建议从SQL Server Profiler开始,然后设置一条跟踪,生成死锁图。这将至少识别您的问题查询和死锁的资源。设置另一个跟踪寻找慢速查询(> 100毫秒)并加快速度。查询运行的时间越长,锁争用的可能性就越大。

答案 1 :(得分:4)

死锁可能由于多种原因及其组合而出现:

  • 架构设计不佳

  • 查询的索引不正确 工作量

  • 写得不好TSQL

  • 激进的交易隔离级别和/或长期运行的未结交易

  • 应用程序访问模式不佳

  • 规格较低或配置不正确 硬件

所有这些都很常见。

我建议你阅读