我有一个特殊的情况。我的表经常被我们代码的不同部分和数千个客户端访问,因此我们在对表进行简单更新和插入时使用了事务。问题是我们不断收到死锁错误。任何人都知道如何缓解这个问题?
问问题
159 次
2 回答
4
这个问题并不太奇怪——当开发人员对锁定的工作原理不太了解时,通常会将事务视为“黑匣子”并期望他们的解决方案能够扩展。
Mitch 在关于向专家支付报酬的评论中是正确的——这是一个对于 SO 的任何解决方案来说都太大的问题。您将需要掌握导致死锁的查询痕迹,并且您将不得不分析从索引到表设计、事务隔离级别到查询模式的所有内容。
我建议从 SQL Server Profiler 开始并设置将生成死锁图的跟踪。这至少会确定您的问题查询和死锁的资源。设置另一个跟踪以查找慢查询(> 说,100 毫秒)并加快查询速度。查询运行的时间越长,锁争用的可能性就越高。
于 2010-10-23T17:23:57.713 回答
4
死锁可能由于多种原因及其组合而出现:
糟糕的架构设计
查询工作负载的索引不正确
写得不好的 TSQL
激进的事务隔离级别和/或长时间运行的打开事务
糟糕的应用程序访问模式
低规格或错误配置的硬件
所有这些都很常见。
我建议你阅读
于 2010-10-23T17:25:37.570 回答