>我用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 子句,请确保源数据库具有要使用的正确索引,或更改查询。