我使用Pentaho创建了一个ETL过程,它从数据库中的表中选择数据并将其加载到另一个数据库中。
我必须要做的主要问题是1.500.000行需要6个小时。完整的表是15.000.000,我必须加载5个这样的表。
任何人都可以解释如何使用pentaho加载大量数据吗?
谢谢。
答案 0 :(得分:1)
对于所有可能的性能问题,没有固定的答案。您需要确定瓶颈并在您的环境中解决它们。
如果在Spoon中运行作业时查看“度量标准”选项卡,通常可以看到行/ 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能够级联所有内容。