gpt4 book ai didi

java - 从 spring mvc 应用程序并行更新 oracle 表

转载 作者:行者123 更新时间:2023-12-02 01:16:04 24 4
gpt4 key购买 nike

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

是否有更好的方法来处理此类场景,例如更好的架构?使用 spring 框架有更好的方法来处理此类场景吗?

最佳答案

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

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

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

关于java - 从 spring mvc 应用程序并行更新 oracle 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com