如何使用 pentaho 将 15.000.000 个寄存器加载到表中?



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

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

谁能解释如何使用 pentaho 加载大量数据?

谢谢。

我从来没有遇到过Pentaho PDI的音量问题。按顺序检查以下内容。

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

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

您的内存大小是多少?它在勺子.bat/spoon.sh 中定义。

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

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

输出步骤是瓶颈吗?通过禁用它进行检查,并在运行过程中观察您的时钟。

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

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

您还必须检查您是否没有锁定自己:当 PDI 完全启动这些步骤时,您可能会截断等待另一个截断解锁。如果您不在永无止境的块中,则可能需要相当长的时间才能使 db 能够级联所有内容。

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

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

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

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

一旦你知道你的瓶颈,你需要找出解决方案。批量加载步骤通常有助于提高输出速率。如果网络滞后阻碍了您,您可能需要先将数据转储到压缩文件,然后在本地复制这些文件。如果表输入具有联接或 where 子句,请确保源数据库具有要使用的正确索引,或更改查询。

最新更新