首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Talend从Excel复制到SQL时的内存和运行时间问题

使用Talend从Excel复制到SQL时的内存和运行时间问题
EN

Stack Overflow用户
提问于 2014-06-02 13:01:26
回答 3查看 1.7K关注 0票数 1

我有一个简单的任务,就是将Excel数据复制到SQL表中。我正在执行一个最初的存储过程来删除表条目。然后,我使用tMap将数据复制到SQL表的Excel输入。

我有20个表要复制数据。我要复制的表条目相对较少(10-100)。不过,当我执行任务时,需要很长时间(5-10分钟),在复制了12个表之后,它的内存就用完了。

我的工作流程是。(存储过程->(on子作业确定) -> excel input -> tmap -> tMSSqlOutput -> (on component ok) -> excel input -> tmap -> tMSSqlOutput (on component ok) ->.-> excel input -> tmap -> tMSSqlOutput)

我的Excel工作表在本地计算机上,当我将数据复制到服务器上的SQL表时。我将运行/调试设置保持为XM1024M、Xmx 8192 M。但还是不起作用。

请问我怎样才能解决这个问题呢?

我正在VM (虚拟机)上运行我的talend。我附上了我工作的截图。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-02 14:12:47

您应该在单独的子作业中运行所有这些单独的步骤,使用“onsub作业确定”链接它们,以便Java垃圾收集器能够更好地在各个步骤之间重新分配内存。

如果这仍然不起作用,您可以将它们分离成完全独立的作业,并使用tRunJob组件将它们链接起来,并确保选择“使用独立的进程运行子作业”:

这将为进程生成一个全新的JVM实例,因此不会被JVM绑定到内存中。尽管如此,您应该注意不要产生太多的JVM实例,因为JVM的启动会产生一些开销,而且很明显,您仍然受到任何物理内存约束的限制。

它确实属于一个单独的问题,但您也可能会发现在工作中使用并行化来提高性能会有一些好处。

票数 2
EN

Stack Overflow用户

发布于 2014-06-02 14:09:30

在onSubJobOK上使用ExcelInput连接到下一个excelInput。这将改变整个共同退化。

生成的代码是每个子作业的函数。onSubJob和onComponentOk在代码生成方面的区别在于,OnComponent ok将调用下一个函数,而OnSubJobOk则等待当前的子作业/函数完成。后者让垃圾收集器更好地发挥作用。

如果这不能解决问题,则创建包含1个的子作业。然后将这些作业与主作业中的OnSubjobOK链接起来。

票数 2
EN

Stack Overflow用户

发布于 2014-06-03 18:35:40

为了避免作业(outOfMemory)占用太多内存,可以将大量转换后的数据存储在磁盘上的临时目录中的tmap中。

这个屏幕展示了如何做到这一点。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23995189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档