为什么 SSIS 中的 Union All 转换是 partially/semi 阻塞转换?

Why is Union All transformation in SSIS a partially/semi blocking transformation?

我无法理解为什么 Union All 是半阻塞转换。

我看到这篇文章

SSIS Full/Semi/Non Blocking Transformations 这说明转换是 "Asynchronous" 并且具有 "New Buffer"。 有人还可以解释我在什么上下文中使用异步词吗?是否在输入记录数的上下文中?

union all 与这些术语有何关联?

SSIS 缓冲区是该工具用来通过转换移动行的工具。同步转换在一个缓冲区上运行,在完成工作时将其传递,以便下一个转换可以立即接手其任务。当它们同步操作缓冲区时,下游转换可以读取从上游转换传递过来的缓冲区行。缓冲区是单个对象 - 您不能将 3 个缓冲区作为 "single" 缓冲区传递给下游转换。

当您到达 UNION ALL 转换时,它上面的每个管道都有自己的缓冲区,因此 SSIS 需要将这些缓冲区中的每一个的行移动到一个新的缓冲区中,以进行下游同步转换。此复制操作是 "asynchronous",因为必须创建缓冲区并将数据从源缓冲区复制到其中,并且下游转换必须等待新缓冲区。这个副本是如何完成的似乎没有记录,但我希望它可能只是将指向每个缓冲区中的行的指针移动到新缓冲区中的数组或链表中。

同步/异步转换在 MSDN 上也有详细记录: https://msdn.microsoft.com/en-us/library/aa337074(v=sql.120).aspx

我在下面提到了基于SSIS 中的非阻塞、半阻塞和阻塞组件。