从postgres表中读取数据&使用Talend写入文件。表大小为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?有人请帮助我,这个过程如何运作?
答案 0 :(得分:0)
与tPostgresInput组件有同样的问题。禁用tPostgresConnection组件中的自动提交设置为我解决了问题!