0

我们现在正在开发一个在带有 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 在插入/选择时在后台做什么

感谢你并致以真诚的问候

4

1 回答 1

1

这不是需要这么长时间的“单次插入”。这是 3,000,000 次插入。

您分析此问题的方式与分析 RDBMS 的任何其他问题的方式相同...

  1. 你的陈述中的where条款是sargable吗?select
  2. 目标表上是否有索引?多少?你能减少这个数字吗?
  3. explain输出告诉你什么?
  4. 您的 中是否有sort隐含的操作select

...不幸的是,这些都不是我们可以帮助您的。

至于单个插入/选择和 JDBC 批处理之间的区别,后者(使用 DB2 网关,其他“帮助”软件)可能会发挥作用,我无法评论。我会说将单个插入/选择移动到本SQL/PL机存储过程中值得探索。

于 2014-12-01T16:02:12.250 回答