13 июня 2022
2 минуты

Как ускорить работу конвейера потока данных в пакете служб интеграции

В конвейере потока данных (data flow task) зачастую участвует большое количество преобразований. Но не все они встраиваются в конвейер одинаково.

Преобразования бывают блокирующие и неблокирующие. Неблокирующая трансформация обрабатывает одну строку и тут же передаёт её дальше по конвейеру. А блокирующая сначала собирает все строки и только после этого их обрабатывает, то есть на некоторое время блокирует работу конвейера.

Посмотрите внимательно на пример:

Заметили неприятный эффект блокировки? Операция сортировки втянула в себя уже более пяти миллионов строк, но так и не выпустила из себя ни одной строки. Остальная часть конвейера простаивает.

И только после того, как все строки поступили на сортировку, эта операция начинает отдавать их на дальнейшую обработку:

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

Первый вариант работает 16 минут, второй — 11.

А сам совет звучит очень просто. Старайтесь ставить неблокирующие операции рядом. По возможности, не разбивайте параллельно работающую цепочку блокирующими операциями.

Бесплатный
Комментарии
Здесь будут комментарии к публикации