【问题标题】:Deadlock help needed please需要死锁帮助
【发布时间】:2010-10-23 17:14:16
【问题描述】:

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

【问题讨论】:

  • 如果您有“成千上万的客户”,我建议您花钱请人帮助您解决问题
  • 我认为您对问题的描述过于抽象。您如何检测就地发生的死锁?您如何访问数据库(LINQToSQL、DBAdapters 或其他)?你用什么:你是实现同步访问还是乐观并发?提供更多细节。
  • 我的接受率?我需要有关如何解决死锁问题的建议。我正在努力解决这个问题,但遇到了困难,需要帮助来解决这个问题。
  • @Kobo:我认为米奇的回答是“不”。
  • 我看过你的一些问题。为什么你认为你得到的答案这么少?如果你不能花一些时间来写一个体面的问题描述,为什么人们还要花时间回答你的问题?

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


【解决方案1】:

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

  • 糟糕的架构设计

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

  • TSQL 写得不好

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

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

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

所有这些都是常见的。

我建议你阅读

【讨论】:

  • 将与此一起使用。我没有编写代码,但我要调试它,这就是我需要帮助的原因。我尝试使用 thread.sleep 方法,使用 transactionscope 对象,但这并没有太大帮助,这就是我向更熟悉处理这种情况的人寻求帮助的原因
  • 我有一个问题,打开行版本控制怎么样?这会有帮助吗?
【解决方案2】:

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

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

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

【讨论】:

  • 另外,请注意,新手使用 SQL Profiler 会使事情变得更糟...
  • 我微笑是因为这不是我的系统
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2017-10-05
  • 2017-03-23
相关资源
最近更新 更多