问题标签 [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.
mysql - CodeIgniter - 数据库事务
$this->db->trans_start();
仅适用$this->db->query();
于?
我只想知道,因为用户指南中的所有 CI 示例都使用$this->db->query();
它适用于这个吗?例子:
任何回应都非常感谢。谢谢!
sql-server-2008 - 锁定数据库服务器 CPU 的查询
我们使用的是 MSSQL server 2008,我们的应用程序有 sql 查询,这些查询将数据库锁定在行和页级别。据说由于锁定,CPU 命中率为 100%。是否有程序或方法可以找出哪个 MSSQL 服务器实例消耗了多少 CPU,以便我可以进一步缩小这个问题的范围?
c# - 数据库的多线程应用程序死锁问题
我正在使用多线程控制台应用程序,其中每个线程基本上都尝试获取满足某些条件的 TOP 1“文件”行并将其锁定。(发生这种情况时会填充一个 LockID 列,以便下一个线程拿起下一个可用的“解锁”“文件”行)
我们在 SQL Server DB 上放置了一个监视器,每次死锁发生在 2 个查询上。
和
第一个查询在创建新线程时运行,我们尝试获取新的“文件”行。
当线程(可能是先前创建的线程)几乎完成处理“文件”记录时,将运行第二个查询。此查询上的已使用事务。隔离级别为“ReadCommitted”。我很确定这两个查询都没有尝试访问相同的“FileID”,因为两个线程随后将永远不会处理相同的“FileID”。我对如何诊断这个问题感到非常困惑。什么可能导致这两个查询之间的死锁?如果有人能引导我朝着正确的方向前进,我将非常感激。提前非常感谢:)
sql-server-2008 - 更新一组行和选择一些相同的行之间的死锁
我有两个 SPID 作为事务运行,下面是每个 SPID 的作用。
SPID A -
- 更新表 1 中的第 1-10 行
- …………
SPID B -
- 更新表 1 中的第 5 行
- 从表 1 中选择第 4,5 和 6 行并更新表 2 中的一行。
- ……
- ……
我面临一个死锁场景,其中 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 锁。
你们还有什么其他建议可以让我摆脱这种僵局?谢谢。
mysql - MySQL 表锁
当我注意到他们有奇怪的设计时,我被要求在 MySQL DB 上做一些 PHP 脚本来显示一些数据。他们希望执行一项研究,该研究需要为每个用户收集多达 2000 条记录,并且他们会自动为每个注册的用户创建一个新表。这是现阶段的一项试点研究,因此他们有大约 30 个表格,但他们应该有 3000 个用户进行真正的研究。
我想建议将所有这些都收集在一个表中,但由于在研究期间该数据库每分钟可能有大约 1500 次 INSERT,所以我想先在这里问这个问题。这会导致 MySQL 中的表锁吗?那么,是一张每分钟插入 1500 条、最大大小为 6,000,000 条记录的表,还是每分钟 30 条插入、最大大小为 2000 条记录的 3000 张表。我想建议第一个选项,但我想确保它不会引起任何问题。我读到 InnoDB 有行级锁。那么,与一个表选项相结合会有更好的性能吗?
sql - 等待在同一事务中获取先前更新的行的读锁
在具有读提交隔离级别的事务中,如果您对一组行进行更新,然后对同一组行进行选择,则 sql server 在执行更新时不会重用它在索引上获取的 x 锁以执行下一个select 还是会尝试在索引上获取一组新的锁。我遇到了一个死锁场景,其中两个进程正在争夺一个索引键锁——被锁定的两个资源之一。当其中一个进程已经完成更新然后对相同的行进行选择时,就会发生这种情况。我的问题是,当该进程在上一步中已经获得同一行的 x 锁时,它如何等待获取索引上的键锁。
database-deadlocks - 死锁管理
我正在做一项研究,但很难找到任何相关信息。我偶然发现了这个问题:
为以下事务场景生成等待图并确定是否存在死锁。
交易:
事务锁定的数据项:
数据项事务正在等待:
现在,就我在事务管理方面所见,这让我非常震惊。有人可以提供参考解释如何解决此类问题,或者无论如何提供帮助吗?
hibernate - Hibernate如何决定更新/插入/删除的顺序
让我们首先忘记 Hibernate。假设我有两个表,A & B。两个事务正在更新这两个表中的相同记录,但是 txn 1 更新 B 然后 A,而 txn 2 更新 A 然后 B。这是一个典型的死锁示例。避免这种情况的最常见方法是预先定义获取资源的顺序。例如,我们应该先更新表 A,然后再更新 B。
回到休眠状态。当我们在一个会话中更新大量实体时,一旦我刷新会话,不同实体的更改将生成相应的插入/更新/删除语句到数据库。Hibernate 是否有一些算法来决定实体之间的更新顺序?如果不是,Hibernate 用来防止第 1 段中描述的死锁情况的方式是什么?
如果 Hibernate 正在维护订单,我如何知道或控制订单?我不希望我在 DB 中的显式更新与 Hibernate 发生冲突,并导致死锁。
java - 如何监控我的多线程 EJB2 JBoss 应用程序中的数据库事务?
我在我的应用程序中遇到了可重现的 Oracle 死锁。对代码的初步调查没有发现任何明显的原因,所以我想在记录正在运行的 SQL 以及最重要的是它们发生在其中的事务时重新创建这种情况。
我开始添加自己的调试语句,但这似乎是我在重新发明轮子并且已经证明容易出错(我最初错过了我的 EJB 方法之一被定义为“RequiresNew”)
有没有工具可以做到这一点?我看过:
log4jdbc,但从我看到的文档中并不清楚它会记录单独的事务,而且它不支持数据源,所以我需要解决这个问题。
jdbcslog - 也不清楚它是否会记录事务
还是我错过了一些更明显的方法来做到这一点?