【发布时间】:2014-11-27 19:40:31
【问题描述】:
我们现在正在开发一个在带有 db2 z/OS 10 的 websphere z/OS 8.5 上运行的系统。目前我们面临以下性能问题:
我们需要将记录从一张表复制到另一张表。对于超过 30mio 条目,此复制应在大约 15 分钟内完成。
我们现在有什么: - 两个表都是分区的(相同的分区列 x) - 使用 websphere 批处理在 java 中复制批处理。该批处理作业并行运行,每个并行子作业在一个分区上执行一次插入/选择(复制大约 3-5 个 mio 条目)。从数据点的角度来看,并行作业应该是完全分离的。
我们正在执行的 SQL 看起来像这样
Insert into targetTable (...) Select (...) from sourceTable Where partitionKey='xxx'.
我们在观察什么: 插入/选择没有充分发挥 db2 的插入性能潜力: - 插入/选择:大约 8000 次插入/秒 - 通过 jdbc 批处理的普通插入:超过 50 000 次插入/秒
我们想问以下问题: - 为什么单次插入/选择的插入性能这么慢?我们需要做一些特殊的配置吗? - 在多个分区上并行工作是正确的方法吗?有什么选择吗? - 我们应该提交较小的插入/选择包吗? - db2 在插入/选择时在后台做什么
谢谢你和最好的问候
【问题讨论】:
-
注意显示实际语句,还是我们应该猜测?你看声明解释计划了吗?你为什么首先使用 Java 来做这件事?
-
我支持@mustaccio - 如果您在 Java 中“按行”执行此操作,预计会受到(可能是巨大的)性能影响。对于大量记录,几乎总是最好使用一次捕获/移动每个人的单个查询。
-
一次插入一个分区(约3mio)的所有记录的一条大语句。让我添加一个类似的 sql 语句: Insert into targetTable (...) Select (...) from sourceTable Where partitionKey='xxx'.
标签: performance db2 zos insert-select