问题标签 [database-deadlocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10390 浏览

php - 避免 MySQL '尝试获取锁时发现死锁;尝试重新启动事务'

我有时会收到 mysql 死锁错误说:

'尝试获取锁时发现死锁;尝试重新启动事务'

我有一个队列表,其中多个 php 进程同时运行,从表中选择行。但是,对于每个进程,我希望它每次获取一组唯一的行,因此我没有选择任何重叠的行。

所以我运行这个查询:(这是我得到死锁错误的查询)

我也是:

同时向表中插入行(没有事务/锁)

同时更新表中的行(没有事务/锁)

同时从表中删除行(没有事务/锁)

同样,我的更新和删除仅更新和删除分配给它们的 process_id 的行......并且我在其中执行“SELECT rows ... FOR UPDATE”的事务是 process_id = null 的地方。从理论上讲,它们永远不应该重叠。

我想知道是否有适当的方法来避免这些死锁?

是否会发生死锁,因为一个事务在选择/更新时锁定表的时间过长,而另一个进程试图执行相同的事务并且只是超时?

任何帮助深表感谢

0 投票
1 回答
50 浏览

performance - 在同一台服务器上跨数据库访问表

我们有一个庞大的应用程序分布在多个数据库中。在几个地方,我们需要从 DB2 中的存储过程更新 DB1 中表中的数据。到目前为止,我们正在通过在 DB2 中创建的视图从 DB1 访问表。然而,随着时间的推移和数据量的增加,性能开始下降,我们在这个过程中遇到了很多死锁。我们已经在 DB1 的表上设置了正确的索引。我们目前使用的是 SQL Server 2008,并且两个数据库在物理上都驻留在同一台服务器上。

任何实用的建议将不胜感激!

0 投票
0 回答
150 浏览

php - 从 MYISAM 转换到 InnoDb 时可能出现的死锁是什么?

我一直在阅读,当您将数据库从 MISAM 存储引擎转换为 InnoDb 引擎时,您必须在应用程序代码中添加对死锁的支持。我需要知道:

  1. 这些死锁是什么?

  2. 将数据库转换为 InnoDb 后,如何在应用程序代码中添加处理它们的功能?

非常感谢有关该主题的任何更多信息。

0 投票
1 回答
326 浏览

sql-server - SQL作业队列实现中的索引与锁定策略

在 SQL 2008+ 中,以下 Queue table 和 Enqueue、Dequeue 操作旨在允许在任意命名队列中的多个生成器和消费者之间的流中以可选的部分顺序连续进行高效的作业排队。通过 RetryLater()、FailNow()、Reset()(未显示)对有害消息处理的微不足道的支持。

消费者事务从 Dequeue() 之前到处理应用程序端一直保持打开状态,直到 DELETE、RetryLater() 或 FailNow()。

  • 这个设计好听吗?
  • 这个设置死锁是免费的吗?
  • IDX_Queue_IsFailed_QueueName_DelayUntilUTC 或其他索引可能对无死锁产生什么负面影响?
  • 还有哪些指标是有益的?
  • 表分区(按 queueName)或其他功能如何提高可伸缩性?
  • 正如设想的那样,生成器通过外部机制向消费者发出信号,表明数据已排队以避免紧密轮询。相反,(并且没有 SQL ServiceBroker)有没有办法使用 SQL 锁来有效地锁定在生成器写入命名队列之前没有可用行的消费者?

    创建索引 [IDX_Queue_IsFailed_QueueName_DelayUntilUTC] ON [dbo].[Queue] ([IsFailed], [QueueName], [DelayUntilUTC])

另外,我想 OrderBy 无关紧要,只要我们总是得到一个没有前任的。

0 投票
1 回答
9330 浏览

entity-framework - 带有实体框架的死锁 - 如何重新运行事务?

这里有点棘手:我们的系统偶尔会遇到死锁。而且我根本没有强大的数据库并发背景。

有几个应用程序访问数据库:使用实体框架访问数据库的主 MVC 应用程序和几个简单的控制台应用程序,每个应用程序都使用 ADO.NET 和原始 SQL 查询数据库,并通过 BinaryTap ActiveRecord 插入数据。

不幸的是,我是客户组织的 FNG,所以我无法部署和测试新想法。此外,我们使用的是 SSMS Express,所以我无法访问 SQL Profiler。但我立即解决问题并不重要,更重要的是我记录我对问题的分析。

当错误消息说我应该重新运行事务时,它是否有任何真实性?这是我们的 DaoBase - 每个 HttpContext 使用一个 ObjectContext(通过 Db 属性)。我们总是将我们的 Dao 更新(但不是查询)放在 SafeAction 中,以便将它们包装在事务中。我是否正在尝试正确地重新运行交易?

其他应用程序通过 ADO.NET/Raw SQL 查询数据库。他们各自的 SELECT 语句没有WITH (NOLOCK)指定 - 也许他们应该?在任何情况下您确实希望锁定纯查询?查询会创建哪些类型的锁:行锁和页锁?实体框架生成的查询呢,我应该告诉 EF 不要锁定查询吗?

感谢所有阅读本文的人。我知道这是一个复杂的问题,我有很多阅读要做..

0 投票
2 回答
207 浏览

sql - 重试 INSERT 导致的死锁

下面的 sproc 尝试向表中插入一行并生成一个随机 ID,该 ID 用于对应表上的一个 PK。具有随机生成的 ID 的冲突在 catch 块中处理,在该块中再次重试/调用该过程。现在,这需要很长时间并导致死锁,因为锁会保留很长时间。有没有办法在重试之前立即释放死锁,以便在其他线程可以成功锁定 PK 索引时有一个短暂的窗口?

0 投票
1 回答
845 浏览

sql-server - 强制 Hibernate 不使用 sp_execute 进行非查询

有没有办法强制 Hibernate 不使用 sp_execute?

考虑这段代码

它变成sp_prepare,然后是sp_execute,这违背了目的:执行此语句后,会话死锁优先级恢复为 NORMAL

在 .NET 中,以下代码将直接执行该语句,并且会话的优先级保持为低(根据需要)

如何强制 Hibernate 以相同的方式发送语句?

0 投票
3 回答
5653 浏览

entity-framework-4 - 并行插入多行时实体框架死锁

我们在使用 EF 并行插入多个实体时遇到问题。许多进程调用 WCF 操作以在每次调用中生成具有不同分布式事务的实体。正如我们在 sql server profiler 中看到的,它生成以下 sql:

所以 EF 给我们一个插入,然后给我们一个选择。因为它是并行完成的,所以它们中的很多都被死锁中止了。

我们使用的是 EF 4.0,而不是 4.1 或 4.2。

知道如何解决这个问题吗?我见过这个,但它已经很老了: http ://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/4f634d8f-1281-430b-b664-ec7ca413b387/

0 投票
1 回答
954 浏览

php - MySQL 死锁问题 (PHP/MYSQL)

我有一段代码从 MySQL 获取死锁错误。基本上,我正在做一个选择来获取一个字段,这取决于该字段我要么在同一条记录上增加一个计数器,要么插入另一个。其他几个系统正在调用此代码。

这是我正在做的一些剪报:(PHP/ZendFramework/MySQL)

[编辑]认为这可能会有所帮助:

0 投票
1 回答
1864 浏览

mysql - 如何避免仅使用选择查询的mysql函数中的死锁?

我有两个函数用于从名为 tree_elements 的表中创建虚拟路径名。对表的任何更新都会调用函数 path(id,language)。有时更新表会导致死锁并显示错误消息(示例):

我不明白为什么会有任何锁定。这些函数只使用选择,不更新,不插入,不删除。我怎样才能避免这种现象?

有我的功能: