我们正在使用IBM的ADO.NET实现来访问AS400上的DB2数据库。有一个Db2Connection对象接受一个连接字符串 - 一切都非常标准(很多例子)并且一切正常。
我们的问题是我们必须进行大规模迁移,迁移工作需要对数据库进行相当多的查询。我们的迁移可以分成几个并行运行的任务 - 不幸的是,性能增益不是线性的(双线程数量<双倍速度)。我们的测试显示瓶颈是Db2Connection - 我们假设它必须对池进行某些操作。我们只是从DB2数据库中读取并将数据保存在SQL数据库中,并且我们没有遇到此问题(减少db2读取但保持sql写入会显着提高速度)。我们尝试使用池的MinSize / MaxSize值和线程数量,但效果似乎很小 - 似乎我们的并行任务中的查询是串行执行的。
所以我的问题:Db2Connection池的活动连接数量(开放阅读器)是否有一些上限?在连接字符串中设置MaxSize没有影响,服务器是否有任何限制?或者还有什么可能会限制我们的查询?
答案 0 :(得分:0)
我们无法真正解决问题。但是,我们的解决方案是首先将整个数据从db2数据库复制到临时sql数据库(使用BulkCopy),然后将数据从那里迁移到" real"新的SQL数据库。这样,迁移速度从大约12小时加速到30分钟(BulkCopy大约需要5分钟)。
由于基本上是相同的代码和概念,从db2迁移到sql,现在从sql迁移到sql,我不知道导致db2性能下降的原因。我认为这是IBM工具的实现逻辑中的一些缺陷。