具有Oracle高堆空间消耗的JDBC适配器

2020-08-20 06:00发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 在升级到PO 7.5...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

在升级到PO 7.5(SP15)之后,我们正在努力将jdbc事务处理到Oracle 12c数据库。 在我们的集成方案中,我们正在SAP和Oracle数据库之间复制数据。 (成千上万的记录,每2000条记录分批处理)直到我们将PO移到新的数据中心之前,这一切都很好。 由于到新数据中心的网络延迟,对于我们的集成方案,正常的交易模式远远不能满足我们的要求。 经过一些测试,我们决定通过以下方式实现批处理JDBC事务:

-检查JDBC接收器通道中的Batch模式选项

-添加参数

sqlBindMode

dateWithBindMode

该选项似乎为我们提供了所需的事务处理速度,但是在生产环境中,由于系统内存不足,它还会导致服务器崩溃。

我们在堆转储中观察到,类oracle.jdbc.driver.T4CPreparedStatement正在填充内存。 该类保存对由于批处理方式而创建的prepared语句的数据的引用。

到目前为止,我们发现的唯一解决方案是手动停止频道。 这将释放对象,并且内存消耗将快速下降。 我们尝试按计划实施此操作,但没有成功。 内存仍然分配。

我们尝试通过以下方式解决问题:

-将驱动程序更新为最新版本(19.3)

-在JDBC接收器通道上添加参数poolWaitingTime

-如注释 1916598
所述,尝试减少线程数 a>

但没有成功。 在我的Java代码中使用相同的驱动程序,即使复制相同数量的数据也无法重现该问题。

以批处理模式连接到Oracle 12c数据库时,您是否有人观察到类似的行为? 任何提示/提示我们如何解决(或调试)此问题?

感谢您的帮助,

耶罗恩