我有一种奇怪的情况。我有不断访问代码的不同部分和数千个客户端的表,因此我们在对表进行简单更新和插入时使用了事务。问题是我们一直遇到死锁错误。任何人都知道如何缓解这个问题?
答案 0 :(得分:4)
这个问题并不是特别的 - 当开发人员对锁定的工作方式知之甚少时,通常会将交易视为“黑匣子”,并希望他们的解决方案能够扩展。
Mitch在关于支付专家费用的评论中是正确的 - 这对于SO上的任何解决方案而言都是一个太大的问题。您将需要配备导致死锁的查询痕迹,并且您将不得不分析从索引到表设计,事务隔离级别以及查询模式的所有内容。
我建议从SQL Server Profiler开始,然后设置一条跟踪,生成死锁图。这将至少识别您的问题查询和死锁的资源。设置另一个跟踪寻找慢速查询(> 100毫秒)并加快速度。查询运行的时间越长,锁争用的可能性就越大。
答案 1 :(得分:4)
死锁可能由于多种原因及其组合而出现:
架构设计不佳
查询的索引不正确 工作量
写得不好TSQL
激进的交易隔离级别和/或长期运行的未结交易
应用程序访问模式不佳
规格较低或配置不正确 硬件
所有这些都很常见。
我建议你阅读