使用 Talend 从 postgres 表读取数据并写入文件。表大小为 1.8GB,有 1,050,000 条记录,大约有 125 列。
将 JVM 分配为 -Xms256M -Xmx1024M。由于内存不足,作业失败。 Postgres 将结果集保存在物理内存中,直到查询完成。因此整个 JVM 都被占用并出现内存不足问题。如果我的理解有误,请指正。
启用 Cursor 选项并将值保持为 100,000 并将 JVM 保持为 -Xms256M -Xmx1024M。作业因 java.lang.OutOfMemoryError 失败:Java 堆空间
我不明白这里的概念。此处使用的游标表示行的获取大小。在我的例子中,设置了 100,000。所以 100,000 将被提取并存储在物理内存中,并将其推送到文件中。然后,将释放占用的内存并获取下一批。如果我错了,请纠正我。
考虑到我的情况,1,050,000 条记录占用 1.8GB。每条记录占用 1.8KB 的大小。 100,000 * 1.8 = 180,000KB。所以整个大小只有 175MB。为什么作业不使用 1GB JVM 运行?有人请帮助我,这个过程是如何工作的?
- 在 talend 中设置游标选项后,一些记录被删除。无法追查其中的问题。
最佳答案
tPostgresInput 组件也有同样的问题。禁用 tPostgresConnection 组件中的自动提交设置解决了我的问题!
关于postgresql - Talend 中的 Postgres 游标计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957644/