如何使用 pentaho 将 15.000.000 个寄存器加载到 table 中?
How to load 15.000.000 registers into a table with pentaho?
我用 Pentaho 创建了一个 ETL 过程,它从数据库中的 table 选择数据并将其加载到另一个数据库中。
我必须提出的主要问题是 1.500.000 行需要 6 个小时。完整的 table 是 15.000.000,我必须像这样加载 5 tables。
谁能解释一下应该如何使用 pentaho 加载大量数据?
谢谢。
没有涵盖所有可能的性能问题的固定答案。您需要确定瓶颈并在您的环境中解决它们。
如果您在 运行 Spoon 中的作业时查看“指标”选项卡,您通常可以看到 rows/s 率在哪个步骤下降。它将是具有完整输入缓冲区和空输出缓冲区的缓冲区。
要了解作业的最大性能,您可以单独测试每个组件。
- 仅将 Table 输入连接到一个虚拟步骤,看看它达到了多少 rows/s。
- 定义一个生成行步骤,其中包含到达目的地的所有字段和一些代表性数据,并将其连接到 Table 输出步骤。再次检查 rows/s 以查看目标数据库的吞吐量。
- 开始将更多 steps/transformations 连接到您的 Table 输入,看看性能下降的地方。
了解瓶颈后,您需要找出解决方案。批量加载步骤通常有助于输出速率。如果网络滞后阻碍了您,您可能希望先将数据转储到压缩文件中,然后将其复制到本地。如果您的 Table 输入包含连接或 where 子句,请确保源数据库具有要使用的正确索引,或者更改您的查询。
我从来没有遇到过 Pentaho PDI 的音量问题。按顺序检查以下内容。
Can you check the problem is really coming from Pentaho: what happens if you drop the query in SQL-Developer or Toad or SQL-IDE-Fancy-JDBC-Compilant.
原则上,PDI 的目的是通过 SELECT * FROM ... WHERE ...
导入数据,然后在转换中完成其余所有工作。我这里有一组转换需要几个小时才能执行,因为它们执行复杂的查询。问题不是由于 PDI,而是查询的复杂性。解决方法是将GROUP BY和SELECT FROM(SELECT...)导出到PDI步骤中,可以在查询结果完成之前开始。结果大约是 4 小时 56 秒。别开玩笑了。
What is your memory size? It is defined in the spoon.bat / spoon.sh.
接近尾声时,您有一行看起来像 PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx4096m" "-XX:MaxPermSize=256m"
。重要的参数是-Xmx...
。如果是 -Xmx256K
,您的 jvm 只有 256KB 的 RAM 可以使用。
改为可用内存的1/2或3/4,以便为其他进程留出空间。
Is the output step the bottleneck? Check by disabling it and watch you clock during the run.
如果它很长,增加提交大小并允许批量插入。
禁用所有索引和约束并在加载时恢复它们。您有很好的 SQL 脚本执行程序步骤来自动执行此操作,但首先手动检查然后在作业中检查,否则重置索引可能会在加载开始之前触发。
您还必须检查您是否没有锁定自己:当 PDI 一起启动这些步骤时,您可能有正在等待另一个截断解锁的截断。如果您不在一个永无止境的块中,可能需要很长时间才能让 db 级联所有内容。
我用 Pentaho 创建了一个 ETL 过程,它从数据库中的 table 选择数据并将其加载到另一个数据库中。
我必须提出的主要问题是 1.500.000 行需要 6 个小时。完整的 table 是 15.000.000,我必须像这样加载 5 tables。
谁能解释一下应该如何使用 pentaho 加载大量数据?
谢谢。
没有涵盖所有可能的性能问题的固定答案。您需要确定瓶颈并在您的环境中解决它们。
如果您在 运行 Spoon 中的作业时查看“指标”选项卡,您通常可以看到 rows/s 率在哪个步骤下降。它将是具有完整输入缓冲区和空输出缓冲区的缓冲区。
要了解作业的最大性能,您可以单独测试每个组件。
- 仅将 Table 输入连接到一个虚拟步骤,看看它达到了多少 rows/s。
- 定义一个生成行步骤,其中包含到达目的地的所有字段和一些代表性数据,并将其连接到 Table 输出步骤。再次检查 rows/s 以查看目标数据库的吞吐量。
- 开始将更多 steps/transformations 连接到您的 Table 输入,看看性能下降的地方。
了解瓶颈后,您需要找出解决方案。批量加载步骤通常有助于输出速率。如果网络滞后阻碍了您,您可能希望先将数据转储到压缩文件中,然后将其复制到本地。如果您的 Table 输入包含连接或 where 子句,请确保源数据库具有要使用的正确索引,或者更改您的查询。
我从来没有遇到过 Pentaho PDI 的音量问题。按顺序检查以下内容。
Can you check the problem is really coming from Pentaho: what happens if you drop the query in SQL-Developer or Toad or SQL-IDE-Fancy-JDBC-Compilant.
原则上,PDI 的目的是通过 SELECT * FROM ... WHERE ...
导入数据,然后在转换中完成其余所有工作。我这里有一组转换需要几个小时才能执行,因为它们执行复杂的查询。问题不是由于 PDI,而是查询的复杂性。解决方法是将GROUP BY和SELECT FROM(SELECT...)导出到PDI步骤中,可以在查询结果完成之前开始。结果大约是 4 小时 56 秒。别开玩笑了。
What is your memory size? It is defined in the spoon.bat / spoon.sh.
接近尾声时,您有一行看起来像 PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx4096m" "-XX:MaxPermSize=256m"
。重要的参数是-Xmx...
。如果是 -Xmx256K
,您的 jvm 只有 256KB 的 RAM 可以使用。
改为可用内存的1/2或3/4,以便为其他进程留出空间。
Is the output step the bottleneck? Check by disabling it and watch you clock during the run.
如果它很长,增加提交大小并允许批量插入。
禁用所有索引和约束并在加载时恢复它们。您有很好的 SQL 脚本执行程序步骤来自动执行此操作,但首先手动检查然后在作业中检查,否则重置索引可能会在加载开始之前触发。
您还必须检查您是否没有锁定自己:当 PDI 一起启动这些步骤时,您可能有正在等待另一个截断解锁的截断。如果您不在一个永无止境的块中,可能需要很长时间才能让 db 级联所有内容。