How can you recognize these three component types, what is their inner working and do they acquire new buffers and/or threads?
Synchronous vs Asynchronous
The SSIS dataflow contain three types of transformations. They can be non-blocking, semi-blocking or fully-blocking. Before I explain how you can recognize these types and what their properties are its important to know that all the dataflow components can be categorized to be either synchronous or asynchronous.
· Synchronous components
The output of an synchronous component uses the same buffer as the input. Reusing of the input buffer is possible because the output of an synchronous component always contain exactly the same number of records as the input. Number of records IN == Number of records OUT.
· Asynchronous components
The output of an asynchronous component uses a new buffer. It’s not possible to reuse the input buffer because an asynchronous component can have more or less output records then input records.
The only thing you need to remember is that synchronous components reuse buffers and therefore are generally faster than asynchronous components, that need a new buffer.
All source adapters are asynchronous, they create two buffers; one for the success output and one for the error output. All destination adapters on the other hand, are synchronous.
Non-blocking, Semi-blocking and Fully-blocking
In the table below the differences between the three transformation types are summarized. As you can see it’s not that hard to identify the three types.
On the internet are a lot of large and complicated articles about this subject, but I think it’s enough to look at the core differences between the three types to understand their working and (did)advantages:
|
Non-blocking
|
Semi-blocking
|
Fully-blocking
|
Synchronous or asynchronous
|
Synchronous
|
Asynchronous
|
Asynchronous
|
Number of rows in == number of rows out
|
True
|
Usually False
|
Usually False
|
Must read all input before they can output
|
False
|
False
|
True
|
New buffer created?
|
False
|
True
|
True
|
New thread created?
|
False
|
Usually True
|
True
|
All SSIS transformations categorized:
Good article, very clear!
LikeLike
Usefull article, thanks a lot !
LikeLike
Thanks, I have been in wrong notion about some of the transformations. But you cleared it thanks.
LikeLike
I am trying to build a Destinatino adapter whose error output can be something apart from integer(errocode and index). How can we proceed with that?
LikeLike
Very good article and very clear.
Thanks a lot.
LikeLike
Awesome article. Probably you could create a package with one of the blocking, non blocking and semi blocking transformations and explain as to what exactly is happening @ runtime for each of the transformations.
LikeLike
nice good article
LikeLike
Nice.. cleared my doubts
LikeLike
Nice article,easy to undesrstand.
LikeLike
Good post !
LikeLike
Good
LikeLike
good explanation and good content.
LikeLike
Good information on comparing various transformations
LikeLike
Very Good
Clearly Understandable……..:-)
Thank You
LikeLike
Very good..
LikeLike
very good article
LikeLike
The multicast component is partially blocking, not non-blocking.
http://social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx
LikeLike
Also, the script component can be either of the 3 i think?
LikeLike
HI,
Let say i have first name and last name as my input column but i m passing Name i.e first name + last name as a single record (by concatanatin).So in this my expression is recieving 2 inputs but one output.So can u please xplain why still expression is non blocking
LikeLike
Hi Waseem,
No of records IN== No of records out (i.e 10(Firstname+Lastname)=10 Name) So 10 input records 10 output records
LikeLike
Text is not visible properly. There are lot of hyperlinks on text.Please remove ads on top of text
LikeLike
Thanks for the wonderful post.
Any idea why “Row sampling” is blocking task whereas “Percentage sampling” is non-blocking?
LikeLike
Lot of Ads in Site area ppearing over content in the website. Can you please move ads to other places so that content should be clearly visible.
LikeLike
Nice Article
LikeLike
so clear picture
LikeLike
Thanks.it’s clear my doubt..
LikeLike
It’s Very GOOOOOOOOD Article
LikeLike
Short and Crisp ..Thanks 🙂
LikeLike
Great article
LikeLike
Little confusion
for Synchronous Row input = Row output
Then how Percentage Sampling can be Synchronous
LikeLike
Is union all is semi-blocking transformation? I think it is non-blocking transformation because it does not need another buffer to store result.
LikeLike
Really nice article . thanks.
LikeLike
Very good article. Useful..
LikeLike
Nice Article
LikeLike
it’s Good
LikeLike
It’s useful and good.
Thanks
LikeLike
That’s really interesting, considering it reverses the customary meaning of synchronous and asynchronous. Typically calls that are synchronous are blocking calls.
LikeLike
really good article
LikeLike
Nice explanation.
Thanks a lot.
LikeLike
Very good explanation. clear and precise
LikeLike
very useful info. thank you
LikeLike
Fantastic article
LikeLike
Nice Article 🙂
LikeLike
Very basic but powerful explanation nice job
LikeLike
You mentioned, All source adapters are asynchronous(two outputs) but you mentioned Lookup , multi cast(these will have more outputs..matched/non matched..etc) are non blocking transformations. Is not this contradict?
LikeLike
Useful article
LikeLike
Hi,
you done good job.
nice explanation on blacking transformation.
LikeLike
ohhh its soo goood
LikeLike
Excellent !
LikeLike