首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Spring批处理多线程作业因“致命:由于事务内空闲超时而终止连接”而失败。

Java Spring批处理多线程作业因“致命:由于事务内空闲超时而终止连接”而失败。
EN

Stack Overflow用户
提问于 2021-07-21 11:13:50
回答 1查看 172关注 0票数 0

我们正在努力提高春季批处理作业的性能,而对于这项技术,我们遇到了一个问题。

我们有一个春季批处理作业,它读取一个包含大约2500万条记录的表,并对每条记录更新其他几个表。该作业计划每天连续多次运行。在引入多线程概念之后,作业的3-4实例运行得非常快,没有问题,然后作业就停止执行,BATCH_JOB_EXECUTION_TABLE中的状态就会启动,不会改变,但不会发生读/写。我发现的唯一日志记录是“致命的:由于空闲事务内超时而终止连接”。我们使用的线程数为3,块大小为100。任何帮助都是非常感谢的。

idle_in_transaction_timeout是1d,我们在AWS上使用Postgres

EN

回答 1

Stack Overflow用户

发布于 2021-07-21 12:04:37

您可以在此场景中尝试事件驱动。由于您正在从DB中获取这么多记录并更新多个表,所以您的应用程序可能会出现内存不足和失败的情况。在多个lambda中拆分操作,然后在多个lambda中执行select和update操作。还要注意您的数据库可以处理多少最大连接。我想您正在2.5百万记录集上运行一个循环,这可能是问题的根本原因。即使很难,它也是异步的,但是它保存着对象,消耗了大量的内存。一个提交是锁定表,它阻塞其他线程。重构您的代码,并在读取1条记录后,将其放入SNS或队列中。其他lambda将捡起它并执行其余的处理。如果您正在使用Aurora,那么创建多个编写实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68468502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档