为什么SSIS中的Union All转换是部分/半阻塞转换?

时间:2015-07-17 07:23:31

标签: sql sql-server ssis

我无法理解为什么Union All是半封锁转换。

  • 显示相同的号码。输入记录作为输出。

我看到了这篇文章

SSIS Full/Semi/Non Blocking Transformations 这说明转换是“异步”并具有“新缓冲区”。 有人也可以在什么上下文中解释我使用的异步字。它是否在输入中的记录数量的上下文中?

工会如何与这些条款相关联?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

下面我基于SSIS中的非阻塞,半阻塞和阻塞组件进行了介绍。 enter image description here