Пул потоков

Запросы INSERT могут обрабатываться несколькими потоками, что значительно увеличивает производительность в случае, если внешняя база данных может эффективно работать с несколькими соединениями одновременно.

Вместе с пулом потоков рекомендуется использовать пакетирование. Тогда каждый поток получает данные из одной (целой) партии и обрабатывает ее. А если пул потоков используется без пакетной обработки, то каждый поток в пуле получает ровно одну запись; как правило, это занимает гораздо больше времени, чем обычный однопоточный INSERT.

Important

Если при выполнении операции любой поток из пула не смог выполнить какой-либо запрос, пользователь получает сообщение об ошибке. Тем не менее, как и в случае использования пакетной обработки, при возникновении ошибки часть записей может оказаться во внешней базе данных. Иными словами, операция вставки при использовании пула потоков не является атомарной даже в том случае, когда внешняя база данных поддерживает транзакции

Для включения пула потоков необходимо создать внешнюю таблицу с параметром POOL_SIZE с одним из следующих значений:

  • integer > 1 – пул потоков состоит из заданного количества потоков;
  • integer < 1 – количество потоков в пуле равно количеству процессоров в системе;
  • integer = 1 – не использовать пул потоков.

Если параметр не указан, пул потоков не используется.