Як визначити, чи перетворення SSIS не блокує, частково блокує або повністю блокує?


12

Існує кілька блогів, які заявляють про категоризацію SSIS-перетворень на блокуючі (асинхронні), неблокуючі (синхронні) та частково блокуючі (асинхронні).

Дивлячись на конкретне запитання: чи є багатоадресна синхронність (не блокує) чи асинхронна (частково блокує)?

Один із ресурсів стверджує, що async: "Multicast - це асинхронна (також відома як частково блокуюча) трансформація" Джерело: 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 - це не блокуюча трансформація, але мені здається , що вона частково блокує.

Будь ласка, не відповідайте за допомогою посилання на список перетворень, класифікованих за типом. Сподіваємось, відповідь на це питання дасть змогу більш жорстким методом довести правильну відповідь.

Оскільки частково блокуючі та блокуючі перетворення переміщуватимуть дані в нові буфери, на відміну від неблокуючих, які працюють на буфері на місці, я підозрюю, що рішенням буде спостереження за створенням буфера під час виконання перетворення, але я не впевнений (a ) якщо це дасть остаточну відповідь і (b) як це зробити.

Я вважаю, що неблокуюча трансформація не спричинить запуск нового дерева виконання, тому можливо, що відповідь лежить у реєстрації PipelineExectionTrees та PipelineExecutionPlan. Це може відрізняти між синхронним та асинхронним, але не може відрізняти частково блокування та повністю блокування.


3
Mulitcast є синхронним. Тест швидкого нюху для синхронізації проти асинхронізації полягає в тому, чи залишається lineageid (до 2012 року) до та після перетворення. Дозвольте розглянути 2012 рік і як це працює зараз.
billinkc

2
Блокування поведінки та синхронність - це не одне і те ж. Синхронність полягає в тому, потрібно перенести дані в новий буфер чи ні, тоді як блокування полягає в тому, чи можна обробляти кожен рядок негайно чи ні. Наприклад, Union All не блокує, але є асинхронним - він створює новий буфер і новий потік виконання, але для цього не потрібно чекати.
Роб Фарлі

@Rob - хоча я погоджуюся, що це не одне і те ж (асинхронний може частково або повністю блокувати) - Блог jorg_klein фактично говорить про те, що Union All частково блокується. Я схильний погодитися так, ніби дані переміщуються в новий буфер, інтуїція змушує мене думати, що частково блокується. Якщо його можна довести неправильно, а моя інтуїція неправильна, тим краще, що це відповіло б на питання!
Thronk

Хтось має уявлення про те, як це можна перевірити? Я думаю, що ефективність або інформаційні журнали можуть бути використані для того, щоб дізнатися це напевно, але я не точно впевнений, який.
Nick.McDermaid

1
Для тих, хто може перевірити цю пораду, переходить тестування

Відповіді:


4

Операція, яка блокується, повинна зачекати, поки всі рядки будуть проглянуті та оброблені, перш ніж вона може почати заповнення буферів.

Операції, які частково блокують, записують дані в нові буфери, які обробляються наступною операцією тільки після заповнення кожного буфера (як правило, трохи менше 10 000 рядків).

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

Але багато текстів називають «частково блокування» як «неблокуючий», оскільки поведінка набагато ближче до «незаблокування», ніж «блокування».

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.