0

我正在尝试并行运行一些 JDBC 提取,但这失败了:java.lang.OutOfMemoryError: Java heap space.

数据连接内存使用情况如何工作,如何解决此问题?

4

1 回答 1

0

此处数据连接代理的内存使用情况实际上主要取决于 fetchSize 参数的值。根据Oracle JDBC 驱动程序文档fetchSize

当此 ResultSet 对象需要更多行时,向 JDBC 驱动程序提供有关应从数据库中获取的行数的提示。

所以,agent的内存使用大概应该是:

number of JDBC extracts running in parallel x fetchSize x size of each row

不幸的是,不同的 JDBC 驱动程序中 fetchSize 的默认值差别很大。例如,某些版本的 Hive JDBC 驱动程序将其设置为 50,而其他较新版本的默认值为 1000。Oracle JDBC 驱动程序的默认值为 10。默认情况下,Postgres 将尝试一次获取整个 ResultSet。

因此,数据连接允许您配置fetchSize值。这可以针对每个源和每个提取进行配置。

除了 OOM 错误,调优通常可以显着fetchSize提高性能。但是,没有一种万能的解决方案,您必须尝试找出提取物的最佳参数值。它通常位于 500-5000 范围内。

于 2020-09-22T15:39:41.097 回答