Jak ustalić, czy transformacja SSIS nie blokuje, częściowo blokuje lub całkowicie blokuje?

12

Istnieje kilka blogów, które twierdzą, że kategoryzują transformacje SSIS na blokujące (asynchroniczne), nieblokujące (synchroniczne) i częściowo blokujące (asynchroniczne).

Patrząc na konkretne pytanie: czy multiemisja jest synchroniczna (nieblokująca) czy asynchroniczna (częściowo blokująca)?

Jeden z zasobów twierdzi, że jest asynchroniczny: „Multicast to asynchroniczna (znana również jako częściowo blokująca) transformacja” źródło: http://social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

i kolejna synchroniczna: https://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

Inne zasoby twierdzą, że transformacja oczyszczania DQS jest transformacją nieblokującą, ale wydaje mi się, że częściowo blokuje.

Proszę nie odpowiadać linkiem do listy przekształceń pogrupowanych według typu. Odpowiedź na to pytanie, miejmy nadzieję, umożliwi bardziej rygorystyczną metodę POTWIERDZENIA poprawnej odpowiedzi.

Ponieważ transformacje częściowo blokujące i blokujące przenoszą dane do nowych buforów, w przeciwieństwie do nieblokujących, które działają na buforze w miejscu, podejrzewam, że rozwiązaniem będzie obserwowanie tworzenia bufora podczas wykonywania transformacji, ale nie jestem pewien (a ), jeśli da to ostateczną odpowiedź i (b) jak to zrobić.

Wierzę, że nieblokująca transformacja nie spowoduje uruchomienia nowego drzewa wykonania, więc możliwe jest, że odpowiedź leży w logowaniu PipelineExectionTrees i PipelineExecutionPlan. Może to rozróżniać między synchronicznym i asynchronicznym, ale może nie rozróżniać między częściowym i całkowitym blokowaniem.

Thronk
źródło
3
Mulitcast jest synchroniczny. Szybki test wąchania dla synchronizacji vs asynchronii polega na tym, czy lineageid (przed 2012 r.) Pozostaje taki sam przed transformacją i po niej. Spójrzmy na rok 2012 i jak to działa teraz.
billinkc
2
Blokowanie zachowań i synchroniczność to nie to samo. Synchroniczność polega na tym, czy dane muszą zostać przeniesione do nowego bufora, czy nie, podczas gdy blokowanie dotyczy tego, czy każdy wiersz można obsłużyć natychmiast, czy nie. Na przykład Union All nie jest blokujący, ale asynchroniczny - tworzy nowy bufor i nowy wątek wykonania, ale nie musi na to czekać.
Rob Farley,
@Rob - chociaż zgadzam się, że to nie to samo (asynchroniczny może częściowo lub całkowicie zablokować) - Blog jorg_klein faktycznie stwierdza, że ​​Union All częściowo blokuje. Jestem skłonny się zgodzić, jak gdyby dane zostały przeniesione do nowego bufora, intuicja każe mi myśleć, że to by częściowo zablokowało. Jeśli można udowodnić, że się myli, a moja intuicja jest nieprawidłowa, tym lepiej, że to odpowiada na pytanie!
Thronk
Czy ktoś ma jakieś pomysły na to, jak można to przetestować? Wydaje mi się, że dzienniki wydajności lub informacyjne mogą być wykorzystane do ustalenia tego na pewno, ale nie jestem do końca pewny.
Nick.McDermaid
1
Dla tych, którzy mogą chcieć przetestować ten

Odpowiedzi:

4

Blokująca operacja musi poczekać, aż wszystkie wiersze zostaną wyświetlone i obsłużone, zanim zacznie zapełniać bufory.

Operacje, które częściowo blokują, zapisują dane w nowych buforach, które są obsługiwane przez następną operację dopiero po zapełnieniu każdego bufora (zwykle poniżej 10 000 wierszy).

Operacja nieblokująca może mieć następną operację działającą na tym samym buforze, ponieważ każdy wiersz jest obsługiwany.

Jednak wiele tekstów będzie nazywać „częściowym blokowaniem” jako „nieblokującym”, ponieważ zachowanie jest znacznie bliższe „nieblokowaniu” niż „blokowaniu”.

Powinieneś być w stanie powiedzieć, co się dzieje, obserwując przepływ danych i obserwując, kiedy liczba rośnie w każdym punkcie.

Rob Farley
źródło