如何将15.000.000个寄存器加载到带有pentaho的表中?

时间:2017-07-04 15:40:25

标签: pentaho etl

我使用Pentaho创建了一个ETL过程,它从数据库中的表中选择数据并将其加载到另一个数据库中。

我必须要做的主要问题是1.500.000行需要6个小时。完整的表是15.000.000,我必须加载5个这样的表。

任何人都可以解释如何使用pentaho加载大量数据吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

对于所有可能的性能问题,没有固定的答案。您需要确定瓶颈并在您的环境中解决它们。

如果在Spoon中运行作业时查看“度量标准”选项卡,通常可以看到行/ s速率下降的步骤。它将是具有完整输入缓冲区和空输出缓冲区的那个。

要了解作业的最大性能,您可以单独测试每个组件。

  • 仅将表输入连接到虚拟步骤,并查看它达到的行数/秒。
  • 定义“生成行”步骤,其中包含到达目的地的所有字段和一些代表性数据,并将其连接到“表格输出”步骤。再次,检查rows / s以查看目标数据库的吞吐量。
  • 开始将更多步骤/转换连接到表输入,并查看性能下降的位置。

一旦了解了瓶颈,就需要找出解决方案。批量加载步骤通常有助于提高输出率。如果网络延迟阻碍了您,您可能希望首先将数据转储到压缩文件并在本地复制。如果Table输入有连接或where子句,请确保源数据库具有正确的索引或更改查询。

答案 1 :(得分:1)

我从未遇到Pentaho PDI音量问题。请按顺序检查以下内容。

  

你能否检查问题是否来自Pentaho:如果你在SQL-Developer或Toad或SQL-IDE-Fancy-JDBC-Compilant中删除查询会发生什么。

原则上,PDI旨在导入具有SELECT * FROM ... WHERE ...的数据,并在转换中完成所有其余工作。我在这里有一组转换,需要花费数小时才能执行,因为它们执行复杂的查询。问题不是由于PDI而是查询的复杂性。解决方案是将GROUP BY和SELECT FROM(SELECT ...)导出为PDI步骤,这些步骤可以在查询结果完成之前启动。结果是4小时到56秒。不开玩笑。

  

你的记忆大小是多少?它在spoon.bat / spoon.sh中定义。

接近结尾,你有一条看起来像PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx4096m" "-XX:MaxPermSize=256m"的线。重要参数是-Xmx...。如果它是-Xmx256K,那么你的jvm只有256KB的RAM可供使用。

将其更改为可用内存的1/2或3/4,以便为其他进程留出空间。

  

输出步骤是瓶颈吗?通过禁用它来检查并在运行期间观察您的时钟。

如果很长,请增加提交大小并允许批量插入。

禁用所有索引和约束并在加载时恢复它们。您有很好的SQL脚本执行程序步骤来自动执行该操作,但首先手动检查然后在作业中检查,否则重置索引可能会在加载开始之前触发。

您还必须检查自己是否锁定自己:由于PDI一起启动了所有步骤,您可能会截断正在等待另一个截断来解锁。如果你不是一个永无止境的块,可能需要很长时间才能使db能够级联所有内容。