我们现在正在开发一个在带有db2 z / OS 10的websphere z / OS 8.5上运行的系统。目前我们面临以下性能问题:
我们需要将记录从一个表复制到另一个表。对于超过30个月的条目,此复制应在大约15分钟内完成。
我们现在有什么: - 两个表都是分区的(相同的分区列x) - 使用websphere批处理在java中复制批处理。此批处理作业并行运行,每个并行子作业在一个分区上执行一次插入/选择(复制约3-5 mio条目)。从数据角度来看,并行作业应该完全是分离的。
我们正在执行的SQL看起来像这样
Insert into targetTable (...) Select (...) from sourceTable Where partitionKey='xxx'.
我们在观察什么: 插入/选择不会充分利用db2的插入性能: - 插入/选择:大约8000个插入/秒 - 通过jdbc批处理的普通插入:超过50 000个插入/ s
我们想问以下问题: - 为什么单个插入/选择的插入性能如此之慢?我们需要进行任何特殊配置吗? - 正在多个分区并行工作的正确方法?任何替代品? - 我们应该提交更小的插入/选择包吗? - db2在插入/选择
的后台做什么谢谢你,以及最好的问候
答案 0 :(得分:1)
它不是"单个插入"这花了很长时间。这是3,000,000个插页。
您使用与RDBMS分析任何其他问题的方式分析此问题...
where
声明sargable上的select
条款是什么?explain
输出告诉您什么?sort
select
操作吗?
醇>
......不幸的是,这些都是我们可以帮助你的事情。
至于单个insert / select和JDBC批处理之间的区别,后者中有足够的变量(使用DB2网关,其他"帮助"软件)可能会发挥作用,我无法评论。我会说将单个insert / select移动到SQL/PL
本机存储过程是值得探索的。