我需要在sql server表上执行un update语句,此表由另一个进程同时使用.因为有时会发生僵局.您是否建议隔离级别以避免或最小化此死锁?
我有时会收到 mysql 死锁错误说:
'尝试获取锁时发现死锁;尝试重新启动事务'
我有一个队列表,其中多个 php 进程同时运行,从表中选择行。但是,对于每个进程,我希望它每次提取都抓取一组唯一的行,因此我没有选择任何重叠的行。
所以我运行这个查询:(这是我得到死锁错误的查询)
$this->db->query("START TRANSACTION;");
$sql = " SELECT mailer_queue_id
FROM mailer_queues
WHERE process_id IS NULL
LIMIT 250
FOR UPDATE;";
...
$sql = "UPDATE mailer_queues
SET process_id = 33044,
status = 'COMPLETED'
WHERE mailer_queue_id
IN (1,2,3...);";
...
if($this->db->affected_rows() > 0) {
$this->db->query("COMMIT;");
} else{
$this->db->query("ROLLBACK;");
}
Run Code Online (Sandbox Code Playgroud)
我也是:
同时向表中插入行(没有事务/锁)
同时更新表中的行(没有事务/锁)
同时从表中删除行(没有事务/锁)
同样,我的更新和删除只更新和删除它们分配有 process_id 的行......以及我执行“SELECT rows ... FOR UPDATE”事务的地方 process_id = null。理论上,它们永远不应该重叠。
我想知道是否有适当的方法来避免这些死锁?
是否会发生死锁,因为一个事务在选择/更新时锁定表的时间过长,而另一个进程正在尝试执行相同的事务并且只是超时?
任何帮助深表感谢
我正在使用Delphi IBQuery和IBTransaction组件使用此查询更新数据库中的所有记录:
UPDATE INVOICES SET BLK = 0;
Run Code Online (Sandbox Code Playgroud)
当用户打开另一个客户端应用程序时,它会在某些记录上留下死锁(由用户打开).
问题在于我的应用程序必须完成上面的查询.
是否有可能实施某种解决方案来强制删除死锁?例如一个SQL查询?
Firebird版本是在Windows 7上运行的2.1.2.18118
看起来尽管我们根本没有使用事务,但我们从SQL Azure中获得了随机死锁错误.
当SQL Azure陷入僵局时,是否没有跨国情况?
看起来当我们运行一批UPDATE查询时,它就像批处理是一个大事务.
所有更新都是通过id并更新一行.
sql-server deadlock azure database-deadlocks azure-sql-database
我们使用 DatabaseTransactions 特征和 MySQL 数据库连接执行单元测试(很多)。
当执行完整的测试套件时,我们得到 15 条左右的“常规错误:1205 超出锁定等待超时;”。当单独执行这些测试时,它们都成功了。
问题主要出现在执行sync()方法时,但不仅限于此。
(尝试增加等待超时,但没有成功)。
任何建议将不胜感激。
也发布在 laracasts 中:https://laracasts.com/discuss/channels/testing/test-suite-general-error-1205-lock-wait-timeout-exceeded
我有一个特殊的情况。我的表经常被代码的不同部分和数千个客户端访问,因此我们在表上进行简单的更新和插入时使用了事务。问题是我们不断遇到死锁错误。有人知道我可以如何缓解这个问题吗?
我想创建一个脚本,其中进入死锁的oracle会话被自动终止.是否有可能找到进入死锁的会话的会话ID.截至目前,我必须退回数据库以消除死锁这个问题可以解决吗?