在 SSIS Dataflow 数据流中的组件可以分为 Synchronous 同步和 Asynchronous 异步这两种类型。
Synchronous 同步组件
同步组件有一个非常重要的特征 - 同步组件的输出和它的输入共享同一个缓存,即输入多少行数据输出就多少行数据。在同步转换的过程中,输入一行,输出一行,输入与输出同步,它们同时发生。
Asynchronous 异步组件
异步组件的特征就是它的输出使用的是一个新的缓存,它不会重用输入的缓存,输出的记录有可能比输入多,也有可能比输入少。在异步转换的过程中,异步组件会要求新的缓存区才会执行处理,比如向 Sort 组件,它必须要在一个操作中处理整个行集。还有像 Merge, Merge Join 等合并操作,组件要先检查各个输入的多个行,然后按照排序好的顺序来合并输入行。包括 Aggregate 组件,它需要新添加一行来保存计算好的聚合值。
所以这样对比下来,通常情况下同步组件因为可以重用输入的缓存因此要比异步组件要快一些,因为异步组件需要一块新的缓存来完成输出内容。
观察所有的数据源组件,它们都是异步类型,因为它们需要创建两个缓存,一个是成功的输出一个是错误输出,所有的目标 Destination 组件都是同步的。
除了上面的两种分类之外,还可以将它们分为这三种类型:Non-blocking 非阻塞, semi-blocking 半阻塞和 Fully-blocking 全阻塞。
Non-blocking 非阻塞转换
非阻塞转换也被称为行转换,也属于同步转换组件。组件接收到一行数据,对这一行数据处理后再输出。在组件的整个输出处理过程中不新建也不删除数据行。比如从上游 Source 中加载1000条数据,经过非阻塞转换组件的时候,每接收一行数据就处理一行,处理完毕后就直接将这一行数据传递给下游组件,不会等到所有的1000条数据处理完才交给下一个组件。
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/SQLServer/
Semi-blocking 半阻塞转换
半阻塞的意思就是转换组件会控制输入行一段时间,比如组件接收到上游的1000行数据,有可能接收到了10行或者100行数据就汇总一次,最后输出这10行或者100行数据,或者输出一行汇总的数据,所以每次接到一行数据并不会立即处理输出。处理完这批数据输出之后,就可以继续接受其它行数据并处理再输出,半阻塞转换也属于异步转换组件。
Fully-blocking 全阻塞转换
与半阻塞转换相同,都是属于异步转换组件。但是全阻塞转换组件会控制全部数据,上游来了1000行数据,全阻塞组件需要接受完全部的1000行数据之后才会处理输出。比如像 Sort 或者 Aggregate 组件,它们需要接受了所有数据之后才会排序或者聚合,这个是很容易理解的。
SSIS 数据流 Data Flow 组件中的分类