【问题标题】:parallel updates to oracle table from spring mvc application从 spring mvc 应用程序并行更新 oracle 表
【发布时间】:2019-12-30 17:28:19
【问题描述】:

我们有一个在 2 个容器/pod 中运行的应用程序。此应用程序从 ActiveMQ 读取请求,并且为了处理此请求,此应用程序需要更新 10 个表。我们在 ActiveMQ 中有数百个 ASYNC 请求,每秒需要处理数百个,每个请求都尝试更新一个 oracle 数据库中的 10 个表。由于在同一时间对 10 个表进行了这些更新,因此某些请求经常失败,并出现此错误“更新数据库时出错。原因:java.sql.SQLException: ORA-00060: 在等待资源时检测到死锁”

有没有更好的方法来处理这类场景,比如更好的架构? 有没有更好的方法来使用 spring 框架来处理这类场景?

【问题讨论】:

    标签: java spring oracle spring-mvc oracle11g


    【解决方案1】:

    你的前提是错误的;死锁不仅仅是由许多表上的大量活动引起的。它们是一种特殊类型的锁定,当不同的会话尝试以不同的顺序锁定同一行时会发生这种锁定。发生这种情况时,唯一的解决方案是终止其中一个会话以释放锁定。

    调查死锁的第一步是查看警报日志并找到死锁生成的跟踪文件。它将显示所涉及的语句和对象。如果幸运的话,错误是由于缺少外键索引或事务表上的位图索引引起的,可以通过简单的 DDL 更改来解决。

    如果您不走运,应用程序会以不同的顺序更改表格。在这种情况下,您需要更改应用程序以始终以相同的方式处理更改。我不认为我可以为此提供任何建议,这完全取决于您的申请。

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2023-03-16
      • 2018-12-05
      • 2015-10-27
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多