Параллельность выгрузок

Рассказываю свой опыт, как добился параллельности выгрузки из центральной базы РИБ сразу в 70 узлов.

 

У клиента распределенная база розницы из 70 узлов. Особенность – несимметричность выгрузки – на точки идет большой объем информации – номенклатура, цены, поставки товаров.

От точек приходит мало информации – только продажи.

 

Поэтому загрузка проходит быстро, практически за 30 минут.

А вот выгрузка идет довольно долго, порой 3 часа.

 

Хотелось выгружать данные параллельно, но при попытке запуска двух выгрузок сразу получал сообщение о блокировке транзакций.

 

Пришлось обратиться за помощью клуба на мисту.

Модератор форума Fragster подсказал мне решение, которое оказалось рабочим. Спасибо ему за это!

 

В справочнике настроек обмена для узла нужно указать единичку в количестве элементов при загрузке и выгрузке данных:

 

Когда-то давно я тоже столкнулся с блокировками, обмены мешали нормальной работе, я ставил в этом поле значение 200, блокировок было меньше. Оказывается, нужно было идти до конца, до единицы. По умолчанию там стоит ноль, то есть обмен целиком проходит в одной транзакции.

Тут же транзакция фиксируется после каждого прочитанного/выгруженного объекта. Таким образом, база не держит долгие транзакции и можно получить параллельность.

 

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

 

Затем я сделал пять настроек выполнения обмена, в каждую забросил по 14 точек:

 

 

На всякий случай и в самой настройке обмена ставлю размер порции обмена 1 (не изучал, что приоритетнее):

 

 

Обмены стартуют одновременно, расписание у каждого одинаковое:

 

 

В истории обмена посмотрел – все выгрузки успешные, с зелеными флажками:

 

 

На выгрузку в пять потоков отвожу час. На самом деле, проходит минут за 40, причем некоторые потоки заканчиваются раньше, другие позже – в зависимости от количества выгружаемых данных.

 

Выгрузка в пять потоков довольно сильно нагружает процессор, практически на 100%. Можно снизить количество потоков или стартовать каждый поток со сдвигом в 10-20 минут.

 

По крайней мере здесь есть выбор, которого нет при последовательных обменах.