使用 ADO.NET 访问 db2 (AS400) 的连接池限制

Connection pool limit for db2 (AS400) access using ADO.NET

我们正在使用 IBM 的 ADO.NET 实现来访问 AS400 上的 DB2 数据库。有一个采用连接字符串的 Db2Connection 对象 - 一切都非常标准(那里有很多示例)并且一切正常。

我们的问题是我们必须进行大型迁移,并且迁移作业需要对数据库进行大量查询。我们的迁移可以并行拆分为多个任务 运行 - 不幸的是,性能增益不是线性的(双倍线程数 < 双倍速度)。我们的测试表明瓶颈是 Db2Connection - 我们假设它必须对池进行一些处理。我们只是从 DB2 数据库中读取数据并将数据保存在 SQL 数据库中,我们没有遇到这个问题(减少 db2 读取但保持 sql 写入会显着提高速度)。我们尝试调整池的 MinSize/MaxSize 值和线程的数量,但效果似乎很小 - 似乎来自并行任务的查询正在串行执行。

所以我的问题是:Db2Connection 池的活动连接数(开放阅读器)是否有上限?在连接字符串中设置MaxSize没有影响,那么服务器有没有限制?或者还有什么可以限制我们的查询?

我们未能真正解决问题。但是,我们的解决方案是首先将整个数据从 db2 数据库复制到临时 sql 数据库(使用 BulkCopy),然后将数据从那里迁移到 "real" 新的 sql 数据库。通过这种方式,迁移时间从大约 12 小时缩短到 30 分钟(批量复制大约需要 5 分钟)。

因为从 db2 迁移到 sql 和现在从 sql 迁移到 sql 基本上是相同的代码和概念 我不知道是什么导致了性能损失数据库我认为这是 IBM 工具的实现逻辑中的一些缺陷。