需要死锁帮助

Posted

技术标签:

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

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

【问题讨论】:

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

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

糟糕的架构设计

查询的索引不正确 工作量

TSQL 写得不好

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

糟糕的应用程序访问模式

规格低或配置不正确 硬件

所有这些都是常见的。

我建议你阅读

Using SQL Server Profiler

Analyzing Deadlocks with SQL Server Profiler

【讨论】:

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

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

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

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

【讨论】:

另外,请注意,新手使用 SQL Profiler 会使事情变得更糟... 我微笑是因为这不是我的系统

以上是关于需要死锁帮助的主要内容,如果未能解决你的问题,请参考以下文章

mysql 发生死锁问题请求帮助

寻求有关 SQL Server 死锁问题的帮助

死锁——这真的有帮助吗?

死锁前言

WSFC 资源死锁案例

Visual Studio 代码分析死锁