SSIS – Non-blocking, Semi-blocking and Fully-blocking components

Posted by

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:

Non-Blocking transformations Semi-blocking transformations Blocking transformations
Audit Data Mining Query Aggregate
Character Map Merge Fuzzy Grouping
Conditional Split Merge Join Fuzzy Lookup
Copy Column Pivot Row Sampling
Data Conversion Unpivot Sort
Derived Column Term Lookup Term Extraction
Lookup Union All  
Multicast    
Percent Sampling    
Row Count    
Script Component    
Export Column    
Import Column    
Slowly Changing Dimension    
OLE DB Command    

53 comments

  1. 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?

    Like

  2. 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.

    Like

  3. 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

    Like

  4. Hi Waseem,
    No of records IN== No of records out   (i.e 10(Firstname+Lastname)=10 Name)  So 10 input records 10 output records

    Like

  5. Thanks for the wonderful post.
    Any idea why “Row sampling” is blocking task whereas “Percentage sampling” is non-blocking?

    Like

  6. 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.

    Like

  7. Is union all is semi-blocking transformation? I think it is non-blocking transformation because it does not need another buffer to store result.

    Like

  8. That’s really interesting, considering it reverses the customary meaning of synchronous and asynchronous.  Typically calls that are synchronous are blocking calls.

    Like

  9. 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?

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s