-1

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

4

2 回答 2

4

这个问题并不太奇怪——当开发人员对锁定的工作原理不太了解时,通常会将事务视为“黑匣子”并期望他们的解决方案能够扩展。

Mitch 在关于向专家支付报酬的评论中是正确的——这是一个对于 SO 的任何解决方案来说都太大的问题。您将需要掌握导致死锁的查询痕迹,并且您将不得不分析从索引到表设计、事务隔离级别到查询模式的所有内容。

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

于 2010-10-23T17:23:57.713 回答
4

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

  • 糟糕的架构设计

  • 查询工作负载的索引不正确

  • 写得不好的 TSQL

  • 激进的事务隔离级别和/或长时间运行的打开事务

  • 糟糕的应用程序访问模式

  • 低规格或错误配置的硬件

所有这些都很常见。

我建议你阅读

于 2010-10-23T17:25:37.570 回答