在 pentaho 4.4.0 中使用“插入/更新”步骤时数据加载很慢
我正在使用 pentaho 4.4.0。在kettle中使用“插入/更新”步骤时,与mysql相比,数据加载的速度太慢了。此步骤将在插入之前扫描表中的整个记录。如果记录存在,它将进行更新。那么在执行“插入/更新”时应该做些什么来优化性能。并且处理速度是4 r / s,所以我的记录总共将超过10万……这个过程需要2个半小时才能完成整个过程。
在 pentaho 4.4.0 中使用“插入/更新”步骤时数据加载很慢
我正在使用 pentaho 4.4.0。在kettle中使用“插入/更新”步骤时,与mysql相比,数据加载的速度太慢了。此步骤将在插入之前扫描表中的整个记录。如果记录存在,它将进行更新。那么在执行“插入/更新”时应该做些什么来优化性能。并且处理速度是4 r / s,所以我的记录总共将超过10万……这个过程需要2个半小时才能完成整个过程。
根据您的评论,听起来您想要Merge rows (diff)
step 后跟Synchronize after merge
. 检查Pentaho wiki以了解这些步骤是如何工作的。
另一个有很大区别的事情是有多少行导致 upsert 与多少总行。如果导致写入的行数超过大约 40%,@carexcer 的最后一条评论可能是更好的方法。如果它更少,请务必尝试该Merge rows (diff)
步骤。
每秒 4 - 25 行听起来很慢。无论您选择哪个步骤,请确保您标记为键的字段已编入索引。
如果大多数行都导致了 upsert,那么完全刷新可能会更好。如果是这种情况,请查看 MySQL 批量加载程序。Pentaho 有批处理和流式批量加载器,虽然我不知道它们有多好。
尝试在Transaction Size (Commit)字段上设置一个较大的值。
根据您将插入的行数,在该字段上设置更多或更少。
就我而言,这大大提高了性能。
如果您要更新插入,例如 100.000 行,则 500 将是一个小值,因为它必须提交 200 次。
更少的提交,更快的执行。
useServerPrepStmts - 假
useCursorFetch - 真
使用压缩 - 真
您可以尝试编辑 Connection 并将这些参数放在那里。这将提高性能。
双击数据库连接 -> 选项选项卡 -> 添加上述参数。
使用 mysql 所有其他选项都不能正常工作我尝试了一些作弊
Insert into A(a,b) values (1,2);
Insert into A(a,b) values (2,2);
Insert into A(a,b) values (3,2);
改成
Insert into A(a,b) values (1,2), (2,2), (3,2);
我是完美的方式