在循环中重试死锁,它们最终会解决吗?

Posted

技术标签:

【中文标题】在循环中重试死锁,它们最终会解决吗?【英文标题】:Retrying deadlocks in a loop, will they eventually resolve? 【发布时间】:2011-10-21 13:24:36 【问题描述】:

如果我在 PL/SQL 函数中编写代码,该函数在捕获 ORA-00060 死锁异常(Oracle 10g)时,只是回滚并重试事务,这样的函数会在有限的时间内完成(您可以假设数据库要做的工作是有限的,而不是无限的流)?

有什么特别的原因我应该在重试之前添加等待吗?

【问题讨论】:

【参考方案1】:

一般来说,这取决于系统中的其他事务,尤其是死锁中涉及的其他事务正在做什么。您可能会遇到第二次尝试由于资源锁定而无限期阻塞的情况,甚至会遇到第二次死锁。

至少,在实施此解决方案之前,我认为您应该了解死锁是如何产生的,并考虑当第一个会话出现异常时所涉及的其他会话中可能发生的情况。

【讨论】:

以上是关于在循环中重试死锁,它们最终会解决吗?的主要内容,如果未能解决你的问题,请参考以下文章

普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?

Xcode 构建因并发构建失败,将在 Flutter 中重试 2 秒

实现死锁异常的重试逻辑

在 Java 中重试 JDBC 连接

在 vuejs 中重试失败的 ajax 请求

重试 INSERT 导致的死锁