Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么SSI中的Union All转换是部分/半阻塞转换?_Sql_Sql Server_Ssis - Fatal编程技术网

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

Sql 为什么SSI中的Union All转换是部分/半阻塞转换?,sql,sql-server,ssis,Sql,Sql Server,Ssis,我无法理解为什么Union都是半阻塞转换 它显示与输出相同数量的输入记录 我偶然发现了这篇文章 这说明转换是“异步”的,并且具有“新缓冲区”。 有人能解释一下异步词是在什么上下文中使用的吗。它是否与输入中的记录数有关 union是如何与这些术语相关联的?SSIS缓冲区是工具用来在转换过程中移动行的。同步转换在一个缓冲区上运行,在它完成工作时传递它,以便下一个转换可以立即开始它的任务。当下游转换同步操作缓冲区时,从上游转换传递缓冲区的行时,下游转换可以读取缓冲区的行。缓冲区是单个对象-不能将

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


  • 它显示与输出相同数量的输入记录
我偶然发现了这篇文章

这说明转换是“异步”的,并且具有“新缓冲区”。 有人能解释一下异步词是在什么上下文中使用的吗。它是否与输入中的记录数有关


union是如何与这些术语相关联的?

SSIS缓冲区是工具用来在转换过程中移动行的。同步转换在一个缓冲区上运行,在它完成工作时传递它,以便下一个转换可以立即开始它的任务。当下游转换同步操作缓冲区时,从上游转换传递缓冲区的行时,下游转换可以读取缓冲区的行。缓冲区是单个对象-不能将3个缓冲区作为“单个”缓冲区传递给下游变换

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

同步/异步转换也在MSDN上有很好的文档记录:

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

“它显示与输出相同数量的输入记录。”?不,不是。如果您有两个同时包含10条记录的inputrecords,则输出将包含20条记录。所以SSI不能只重用一个输入的缓冲区,我的意思是总和总是一样的。那么,为什么它不能使用单个缓冲区来获取数据呢..为什么要将其全部移动到一个新的缓冲区?也许这只是一个概念上的或管理上的“移动”,物理记录不会移动。啊..没有多大意义:(啊..现在这很有意义!如果您想了解更详细的格式,请添加到回复中。在包含Union All、transformation的DFT包中,配置日志记录。在“详细信息”选项卡中进行配置时,您会发现PipeLineExecutionPlan、PipeLineExecutionTrees。请检查这两个。在运行pa时在联合所有转换时,您会看到有3个独立的管道。希望这有帮助。这里有一个链接-