我在MySQL中的输入表有20万条记录,而Oracle中的目标表是空的。我需要将整个表从MySQL加载到Oracle中。我只是使用表输入和表输出步骤。
我的目的不是在阅读时长时间锁定源表。
我试图实现的负载(记录数)是否存在问题?
我可以在表输出中看到Use batch update for inserts
选项。我在表输入中看不到类似的东西。有没有办法在Pentaho中执行批处理?
答案 0 :(得分:5)
别担心,对于PDI来说,20万条记录是一个小数字,如果表格打开输入,你就不会锁定它。这就是Bulk load
用于输出表而不是输入表的原因。
但是,常见的beginer陷阱是输出表上的Truncate table
选项。如果您运行(不充分或并行处理)两次输出步骤,则每个将锁定另一个。永远。
要加速:您可以在输入中使用Lazy conversion
复选框,以便数据保持字节格式,直到使用它为止。但我不确定你是否在一个简单的输入/输出表上获胜。如果在输出文件上写入日期或Blob时发生错误,则错误消息将非常神秘。
您还可以通过增加提交大小来提高输出速度(最糟糕的是在Oracle中进行一些试验),并通过增加number of rows in row set
来增加table input
读取的行数。 。要执行此操作,请右键单击Properties/Miscelanous
。
我真正建议的是增加JVM内存大小。使用编辑器(记事本或更好)编辑名为spoon.bat
的文件。你会在第94-96行找到一条包含类似“-Xmx256K”的行。将其更改为“-Xmx4096M”(其中4096是机器RAM大小的一半)。
执行“批处理”有很多意义。其中一人正在寻找Make the transformation database transactional
。您可以使用上面提到的Number of row in rowset
下方的复选框(在PDI最新版本中将其拼写为Make the transformation database
)来执行此操作。选中该框后,如果出现问题,数据库的状态将回滚,就好像转换从未执行过一样。但我不建议你这样做。
答案 1 :(得分:1)
@AlainD解决方案的附加内容有几个选项: - 调整MySQL以获得更好的插入性能 - 在PDI中使用MySQL批量加载程序步骤 - 使用PDI将SQL语句写入文件,并使用mysql-binary
读取它们使用一些简单的JDBC连接设置可以提高速度。