postgresql - Talend 中的 Postgres 游标计算

标签 postgresql jvm cursor talend

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

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

  2. 启用 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 运行?有人请帮助我,这个过程是如何工作的?

  1. 在 talend 中设置游标选项后,一些记录被删除。无法追查其中的问题。

最佳答案

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

关于postgresql - Talend 中的 Postgres 游标计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957644/

相关文章:

android - 如何比较android中的时间值

java - spring-data-jpa 1.11.16 带游标的存储过程

sql - 对连续整数求和并分组

postgresql - 如何对一组 PostgreSQL 查询进行基准测试?

multithreading - 如何告诉Hotspot JVM使用单处理器还是多处理器线程同步?

java - 如何用 Java 编写正确的微基准测试?

android - 在 Android 中获取联系方式需要花费大量时间?

sql - 如何获得最大列的行和第二高的值作为最后一列?

postgresql - 拆分数组,仅提取唯一值,然后重新合并到 Postgresql 中的数组

java - 如何设置Jenkins使用系统的日期,时间,数字和货币格式?