问题标签 [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 投票
2 回答
774 浏览

mysql - CodeIgniter - 数据库事务

$this->db->trans_start();仅适用$this->db->query();于?

我只想知道,因为用户指南中的所有 CI 示例都使用$this->db->query();

它适用于这个吗?例子:

任何回应都非常感谢。谢谢!

0 投票
1 回答
930 浏览

sql-server-2008 - 锁定数据库服务器 CPU 的查询

我们使用的是 MSSQL server 2008,我们的应用程序有 sql 查询,这些查询将数据库锁定在行和页级别。据说由于锁定,CPU 命中率为 100%。是否有程序或方法可以找出哪个 MSSQL 服务器实例消耗了多少 CPU,以便我可以进一步缩小这个问题的范围?

0 投票
1 回答
554 浏览

c# - 数据库的多线程应用程序死锁问题

我正在使用多线程控制台应用程序,其中每个线程基本上都尝试获取满足某些条件的 TOP 1“文件”行并将其锁定。(发生这种情况时会填充一个 LockID 列,以便下一个线程拿起下一个可用的“解锁”“文件”行)

我们在 SQL Server DB 上放置了一个监视器,每次死锁发生在 2 个查询上。

第一个查询在创建新线程时运行,我们尝试获取新的“文件”行。

当线程(可能是先前创建的线程)几乎完成处理“文件”记录时,将运行第二个查询。此查询上的已使用事务。隔离级别为“ReadCommitted”。我很确定这两个查询都没有尝试访问相同的“FileID”,因为两个线程随后将永远不会处理相同的“FileID”。我对如何诊断这个问题感到非常困惑。什么可能导致这两个查询之间的死锁?如果有人能引导我朝着正确的方向前进,我将非常感激。提前非常感谢:)

0 投票
1 回答
629 浏览

sql-server-2008 - 更新一组行和选择一些相同的行之间的死锁

我有两个 SPID 作为事务运行,下面是每个 SPID 的作用。

SPID A -

  1. 更新表 1 中的第 1-10 行
  2. …………

SPID B -

  1. 更新表 1 中的第 5 行
  2. 从表 1 中选择第 4,5 和 6 行并更新表 2 中的一行。
  3. ……
  4. ……

我面临一个死锁场景,其中 SPID A 已更新第 4 行并等待聚集索引上的 X 锁定以更新第 5 行,而 SPID B 在第 2 步中等待第 4 行的聚集索引上的 S 锁定在 X由 SPID A 锁定。表 1 上还有一个非聚集索引,但它不涵盖选择查询,因此它查找聚集索引。我假设即使我将其设为覆盖索引 SPID A 也会锁定非聚集索引,从而使 SPID B 等待它。我正在考虑将隔离级别升级为序列化,以便在 SPID B 已经开始更新到第 5 行时,或多或少更新整个表的 SPID A 将不得不等待获取其锁定。它还将阻止 SPID B如果 SPID A 已经开始,则从获取 x 锁。

你们还有什么其他建议可以让我摆脱这种僵局?谢谢。

0 投票
1 回答
129 浏览

mysql - MySQL 表锁

当我注意到他们有奇怪的设计时,我被要求在 MySQL DB 上做一些 PHP 脚本来显示一些数据。他们希望执行一项研究,该研究需要为每个用户收集多达 2000 条记录,并且他们会自动为每个注册的用户创建一个新表。这是现阶段的一项试点研究,因此他们有大约 30 个表格,但他们应该有 3000 个用户进行真正的研究。

我想建议将所有这些都收集在一个表中,但由于在研究期间该数据库每分钟可能有大约 1500 次 INSERT,所以我想先在这里问这个问题。这会导致 MySQL 中的表锁吗?那么,是一张每分钟插入 1500 条、最大大小为 6,000,000 条记录的表,还是每分钟 30 条插入、最大大小为 2000 条记录的 3000 张表。我想建议第一个选项,但我想确保它不会引起任何问题。我读到 InnoDB 有行级锁。那么,与一个表选项相结合会有更好的性能吗?

0 投票
0 回答
73 浏览

sql - 等待在同一事务中获取先前更新的行的读锁

在具有读提交隔离级别的事务中,如果您对一组行进行更新,然后对同一组行进行选择,则 sql server 在执行更新时不会重用它在索引上获取的 x 锁以执行下一个select 还是会尝试在索引上获取一组新的锁。我遇到了一个死锁场景,其中两个进程正在争夺一个索引键锁——被锁定的两个资源之一。当其中一个进程已经完成更新然后对相同的行进行选择时,就会发生这种情况。我的问题是,当该进程在上一步中已经获得同一行的 x 锁时,它如何等待获取索引上的键锁。

0 投票
1 回答
776 浏览

database-deadlocks - 死锁管理

我正在做一项研究,但很难找到任何相关信息。我偶然发现了这个问题:

为以下事务场景生成等待图并确定是否存在死锁。

交易:

事务锁定的数据项:

数据项事务正在等待:

现在,就我在事务管理方面所见,这让我非常震惊。有人可以提供参考解释如何解决此类问题,或者无论如何提供帮助吗?

0 投票
2 回答
28116 浏览

hibernate - Hibernate如何决定更新/插入/删除的顺序

让我们首先忘记 Hibernate。假设我有两个表,A & B。两个事务正在更新这两个表中的相同记录,但是 txn 1 更新 B 然后 A,而 txn 2 更新 A 然后 B。这是一个典型的死锁示例。避免这种情况的最常见方法是预先定义获取资源的顺序。例如,我们应该先更新表 A,然后再更新 B。

回到休眠状态。当我们在一个会话中更新大量实体时,一旦我刷新会话,不同实体的更改将生成相应的插入/更新/删除语句到数据库。Hibernate 是否有一些算法来决定实体之间的更新顺序?如果不是,Hibernate 用来防止第 1 段中描述的死锁情况的方式是什么?

如果 Hibernate 正在维护订单,我如何知道或控制订单?我不希望我在 DB 中的显式更新与 Hibernate 发生冲突,并导致死锁。

0 投票
1 回答
326 浏览

java - 如何监控我的多线程 EJB2 JBoss 应用程序中的数据库事务?

我在我的应用程序中遇到了可重现的 Oracle 死锁。对代码的初步调查没有发现任何明显的原因,所以我想在记录正在运行的 SQL 以及最重要的是它们发生在其中的事务时重新创建这种情况。

我开始添加自己的调试语句,但这似乎是我在重新发明轮子并且已经证明容易出错(我最初错过了我的 EJB 方法之一被定义为“RequiresNew”)

有没有工具可以做到这一点?我看过:

  • log4jdbc,但从我看到的文档中并不清楚它会记录单独的事务,而且它不支持数据源,所以我需要解决这个问题。

  • jdbcslog - 也不清楚它是否会记录事务

还是我错过了一些更明显的方法来做到这一点?

0 投票
2 回答
3234 浏览

sql-server-2005 - 删除和更新之间的死锁

第一道工序:

第二道工序:

资源清单:

表“UserPlanOption 有一个复合 PK(UserId 和 PlanOptionId)。为什么删除会导致页面锁定?有人可以帮我理解这是怎么回事吗?让我困惑的是,我认为死锁是由后续引起的来自同一个客户端的查询,但这是不可能的。这些必须是访问同一个网页的不同客户端。

实际上,我想我知道第一个问题的答案——删除范围需要页面锁定。但我怎样才能解决这个问题?

索引查询的结果:

更新删除的执行计划。