Как определить, является ли преобразование служб SSIS неблокирующим, частично блокирующим или полностью блокирующим?

12

Есть несколько блогов, которые утверждают, что классифицируют SSIS Преобразования в блокирующие (асинхронные), неблокирующие (синхронные) и частично блокирующие (асинхронные).

При рассмотрении конкретного вопроса: многоадресная передача является синхронной (неблокирующей) или асинхронной (частично блокирующей)?

Один из источников заявляет об асинхронности: «Многоадресная передача - это асинхронное (также известное как частичное блокирование) преобразование» источник: http://social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

и другой синхронный: https://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

Другие ресурсы утверждают, что преобразование DQS Cleansing является неблокирующим преобразованием, но мне кажется , что оно частично блокирует.

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

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

Я считаю, что неблокирующее преобразование не вызовет начало нового дерева выполнения, поэтому возможно, что ответ заключается в регистрации в PipelineExectionTrees и PipelineExecutionPlan. Это может различать синхронный и асинхронный, но не может различать частичную блокировку и полную блокировку.

Thronk
источник
3
Мультикаст синхронный. Тест быстрого анализа для синхронизации против асинхронного заключается в том, остается ли lineageid (до 2012 года) одинаковым до и после преобразования. Позвольте мне посмотреть в 2012 году и как это работает сейчас.
billinkc
2
Блокирующее поведение и синхронность не одно и то же. Синхронность заключается в том, нужно ли перемещать данные в новый буфер или нет, тогда как блокировка - в том, может ли каждая строка обрабатываться немедленно или нет. Например, Union All является неблокирующим, но асинхронным - он создает новый буфер и новый поток выполнения, но для этого не нужно ждать.
Роб Фарли
@Rob - хотя я согласен, что это не одно и то же (асинхронный может частично или полностью блокировать) - в блоге jorg_klein фактически говорится, что Union All частично блокирует. Я склонен согласиться с тем, что если данные перемещаются в новый буфер, интуиция заставляет меня думать, что это частично заблокирует. Если он может оказаться неправым, а моя интуиция неверной, тем лучше, что это ответит на вопрос!
Thronk
У кого-нибудь есть идеи о том, как это можно проверить? Я думаю, что производительность или информационные журналы могут быть использованы, чтобы узнать это наверняка, но я не совсем уверен, какой.
Nick.McDermaid
1
Для тех, кто может захотеть протестировать этот совет, идет тестирование полублокирующих преобразований

Ответы:

4

Блокирующая операция должна ждать, пока все строки не будут просмотрены и обработаны, прежде чем она сможет начать заполнять буферы.

Операция, которая частично блокирует, записывает данные в новые буферы, которые обрабатываются следующей операцией только после заполнения каждого буфера (обычно чуть менее 10000 строк).

Операция, которая не является блокирующей, может иметь последующую операцию, работающую с тем же буфером, поскольку обрабатывается каждая строка.

Но многие тексты будут ссылаться на «частичную блокировку» как «неблокирующую», поскольку поведение намного ближе к «неблокирующей», чем «блокирующей».

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

Роб Фарли
источник