数据连接 - 并行 JDBC 提取因 OutOfMemoryError 而失败

Data connection - Parallel JDBC extracts failing with OutOfMemoryError

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

数据连接内存使用如何工作,我该如何解决这个问题?

此处数据连接代理的内存使用实际上主要取决于fetchSize 参数的值。每 the Oracle JDBC driver docs, fetchSize:

Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed for this ResultSet object.

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

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

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

因此,数据连接允许您配置 fetchSize 值。这在 per-source 和 per-extract 中都是可配置的。

撇开 OOM 错误不谈,调整 fetchSize 总体上可以提高性能 significantly。但是,没有 one-size-fits-all 解决方案,您必须通过试验找出提取物的最佳参数值。它通常位于 500–5000 范围内。