在Talend中进行Postgres游标计算

时间:2017-03-22 16:34:35

标签: postgresql jvm cursor talend

从postgres表中读取数据&使用Talend写入文件。表大小为1.8GB,包含1,050,000条记录,大约有125列。

  1. 将JVM分配为-Xms256M -Xmx1024M。由于内存不足,作业失败了。 Postgres将结果集保存在物理内存中,直到查询完成。因此整个JVM被占用并导致内存不足问题。如果我的理解是错误的,请纠正我。

  2. 启用Cursor选项并将值保留为100,000,将JVM保持为-Xms256M -Xmx1024M。作业失败,出现java.lang.OutOfMemoryError:Java堆空间

  3. 我不明白这里的概念。这里使用的游标表示行的获取大小。在我的情况下,设置了100,000。因此将获取100,000并将其存储在物理内存中,并将其推送到文件中。然后,将释放占用的内存并获取下一批。如果我错了,请纠正我。

    考虑到我的情况,1,050,000条记录占据1.8GB。每条记录占用1.8KB的大小。 100,000 * 1.8 = 180,000KB。所以整个尺寸只有175MB。为什么作业没有运行1GB JVM?有人请帮助我,这个过程如何运作?

    1. 在talend中设置光标选项后,某些记录被删除。无法跟踪问题。

1 个答案:

答案 0 :(得分:0)

与tPostgresInput组件有同样的问题。禁用tPostgresConnection组件中的自动提交设置为我解决了问题!