问题标签 [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 回答
64410 浏览

sql-server-2008 - 如何杀死/终止 Sql Server 2008 上所有正在运行的进程

在主数据库上执行此查询后,它给了我所有数据库上所有正在运行的进程,是否有任何查询会杀死数据库上运行的所有进程。

0 投票
1 回答
2119 浏览

mysql - 当我选择多行进行更新时,我会死锁吗?

在 MySQL+InnoDB 中,假设我有一个表和两个线程,它们都执行“SELECT ... FOR UPDATE”。假设两个 SELECT 语句最终都选择了多行,例如它们都最终选择了 R42 和 R99 行。这有可能会陷入僵局吗?

我正在考虑这种情况:第一个线程尝试锁定 R42 然后 R99,第二个线程尝试锁定 R99 然后 R42。如果我不走运,两个线程会死锁。

我在 MySQL词汇表中读到“死锁

当事务锁定多个表中的行(通过 UPDATE 或 SELECT ... FOR UPDATE 等语句)但顺序相反时,可能会发生死锁。...

为了减少死锁的可能性,... 在 SELECT ... FOR UPDATE 和 UPDATE ... WHERE 语句中使用的列上创建索引。

暗示在我的情况下(单表)我不会死锁,可能是因为 MySQL 会自动尝试按主键的顺序锁定行,但我想确定,我在确切地告诉我发生了什么的文档。

0 投票
1 回答
1529 浏览

informix - Informix - 涉及单表的死锁场景

我正在寻找一种方法来强制 Informix IDS 11.50 出现死锁。解决方案必须满足以下条件:

  • 只涉及一张桌子,
  • 隔离等级:COMMITTED READ,
  • ROW水平锁定,
  • 两个线程,但只有一个线程可以访问另一个线程修改的行。

我想出了满足除最后一个条件之外的所有条件的解决方案:

t1的创建和填充如下:

在 2 个单独的 dbaccess 控制台(锁定模式设置为等待 15 秒)上,我执行以下命令:

这些线程是死锁的,因为 SELECT 正在等待其他线程提交。这个解决方案不好,因为两个线程都选择了另一个线程更新的行,这违反了第四个条件。任何人都可以想出一种方法来改进此解决方案或提供满足所有标准的其他解决方案吗?

0 投票
2 回答
9922 浏览

mysql - 在 SHOW ENGINE INNODB STATUS 中未启动事务是什么意思?

这是“SHOW ENGINE INNODB STATUS”的几行响应;


我想知道这个'Transaction transId,not started'是什么意思?是否有任何查询未能执行?

我正在使用innodb。我也没有手动开始交易。它正在考虑自动事务,因为我正在对具有批量数据的表发出更新查询。而且你在 5-10 分钟内会在这个单表上获得数百个 mysql 更新查询。

请让我知道“交易未开始”到底是什么意思?它是显示失败的查询还是只是一个正常的日志?

提前致谢!

0 投票
2 回答
4056 浏览

mysql - 试图了解 InnoDB 表上的 MySQL 死锁

我试图了解 MySQL 在同一表上的并发客户端处理期间发现的死锁。这是“SHOW InnoDB STATUS”命令的有趣部分:

我从这个日志中了解到,事务 (1) 正在等待获取INodeparent_basenametable索引上的共享锁testsuiteINode. 现在,事务 (2) 在同一个索引上具有排他锁。但奇怪的是,事务 (2) 也在等待给定表的 X 锁。这是为什么?如果事务(2)已经有锁,为什么还要等待呢?

(总的来说,我还没有找到任何文档可以准确解释如何读取状态命令的输出 - 如果有人也可以向我指出这一点,那将会很有趣)

0 投票
1 回答
99 浏览

java - 为什么这两个数据库会提交死锁?

以上是客户从站点发送给我的死锁跟踪的净化实例。据我了解,当两个提交尝试无序访问相同的表时,就会发生死锁。

然而,在这种情况下,只有一个表,执行这些 sql 语句的代码将它们从队列中拉出并按顺序执行。

为什么会出现这种僵局?

0 投票
1 回答
1212 浏览

.net - 由索引上的页面锁定导致的 sql server compact 死锁

我正在使用 NHibernate作为数据访问层和SQL Server compact开发 ac# 桌面应用程序。该应用程序使用多个线程来执行数据的选择和更新。

一般来说,它工作正常,但有时会出现死锁情况。

15:28:16,750 55 WARN:System.Data.SqlServerCe.SqlCeLockTimeoutException (0x80004005):超时..... [会话 id = 28,线程 id = 14576,进程 id = 12960,表名 = PatientOrder,冲突类型 = x锁定(x 块),资源 = PAG(idx):1035]

如果两个事务尝试更新相同的行,我可以理解死锁问题。但是在这种情况下,两个事务都在不同的行上工作。死锁似乎是由索引 ( )上的页面锁定引起的。Resource = PAG (idx): 1035

所以我的问题是:可以做些什么来防止这些死锁?

我已经研究了以下选项:

  • 禁用索引的页面锁定。这对于“完整”SQL 服务器是可能的,但精简版似乎不支持

  • 配置休眠以生成with(rowlock)sql 语句,这将(希望)防止问题

  • 尝试使用session.lock(...)以对所有事务执行相同顺序的资源访问。然而,这似乎没有帮助,因为死锁事务无论如何都在不同的行上工作

  • 序列化所有数据库事务,以便一次只有一个处于活动状态。这确实有效,但会对性能产生重大影响。

0 投票
1 回答
15700 浏览

sql-server - 如何解决 Index/Key 相关的死锁

我使用SQL Server 2008 中的死锁图诊断出我的 sql server 中的死锁问题。

问题与我的索引有关。我有两个查询:一个包含大量连接和子查询的长期运行报告,根据基表上的两个不同日期提取数据,以及一个快速更新查询,它更新该基表上的相同日期。我有两个索引,报告希望对它们都有一个共享的 KEY 锁,而更新查询希望对它们都有一个独占的 KEY 锁,并且不知何故,每个查询只能设法获取其中一个键,因此两者都无法继续。

我能做些什么来解决这个问题?

以下是关于我的情况的所有详细信息:

我的基表如下所示:

我的索引如下所示:

最后,我的更新如下所示:

报告是按日期统计各种统计数据,所以我不会在这里包括。我有意将 idx_createDate 和 idx_upDate 设计为“覆盖”或包含 dataField1,因为它在该报告中被大量使用。

我相信该报告在其中一个索引上获取了共享锁,然后点击子查询并请求在第二个索引上锁。同时,更新查询希望在两个索引上都有一个排他锁,以便同时更新 upDate 和包含的 dataField1。

你们有什么感想?

编辑: 这是 XML 死锁图,根据要求:

0 投票
1 回答
168 浏览

sql-server-2005 - 解决死锁的最佳方法

这是一个简单的问题,但我浪费了几天时间来解决它。

我使用 spring jdbc 模板作为我的 DAO 层 mssql sever 2005 作为我的数据库,我们有一个订单输入系统。现在,当系统上有超过 5 个人时,我们会遇到如此多的死锁场景。当人们尝试创建新订单而其他人更新现有订单时,似乎会发生锁定。同一张表的插入和更新语句之间似乎存在冲突。

我没有做任何事情来解决这个问题,并且没有任何工作。所以现在我正在考虑引入 java.util.semaphore 或 Lock 并控制线程的并发访问,或者我可以使用 Synchronized 方法或块。

对此你们怎么看?有没有更好的方法在数据库服务器上处理这个问题?

谢谢。

0 投票
1 回答
1472 浏览

mysql - 如何避免 MySql 死锁?

我正在使用jOOQ数据库抽象层与 MySql 数据库交谈。

我不断收到以下错误:

这是在向表中批量插入大约 500 行的过程中。可能会从不同的线程一次尝试多个这些批量插入。

是什么导致了死锁,我该如何避免它?