Ограничение пула соединений для доступа db2 (AS400) с использованием ADO.NET

Мы используем ADO.NET реализация от IBM для доступа к базе данных DB2 на AS400. Есть объект Db2Connection, принимающий строку подключения — все довольно стандартно (много примеров), и все работает хорошо.

Наша проблема заключается в том, что мы должны сделать большую миграцию, и задача миграции должна сделать довольно много запросов в базе данных. Наша миграция может быть разделена на несколько задач, выполняющихся параллельно — к сожалению, прирост производительности не линейный (двойное количество потоков Наши тесты показывают, что узким местом является Db2Connection — мы предполагаем, что это должно сделать что-то с объединением. Мы только читаем из базы данных DB2 и сохраняем данные в базе данных SQL, и там мы не сталкиваемся с этой проблемой (сокращение чтения db2, но сохранение записи sql значительно увеличивает скорость). Мы пытались играть со значениями MinSize / MaxSize пулов и количеством потоков, но эффект кажется минимальным — кажется, что запросы из наших параллельных задач выполняются последовательно.

Итак, мой вопрос: существует ли некоторый верхний предел относительно количества активных соединений (открытых читателей) для пула Db2Connection? Установка MaxSize в строке подключения не влияет, поэтому сервер имеет какие-либо ограничения? Или что еще может регулировать наши запросы?

1 ответ

  1. Мы не смогли реально решить проблему. Однако нашим решением было сначала скопировать все данные из базы данных db2 во временную базу данных sql (с помощью BulkCopy), а затем перенести данные оттуда в «реальную» новую базу данных sql. Таким образом, миграция была ускорена с 12 часов до 30 минут (BulkCopy занимает около 5 минут).

    Поскольку это в основном один и тот же код и концепция, выполняющие миграцию из db2 в sql, а теперь из sql в sql, я понятия не имею, что вызывает потерю производительности с db2. Я предполагаю, что это какой-то недостаток в логике реализации инструментов IBM.