OLE DB Source存储如何记录在内存中? (SSIS)

时间:2017-07-04 17:47:49

标签: c# .net ssis

我的Sql Server Integration Service包中有一个OLE DB源。然后,我还有一个脚本组件连接到源。

OLE DB Source访问来自SQL查询的数据,该查询获得500.000条记录。我想知道当包开始运行时,应用程序是否开始存储内存中的所有记录(500.000),或者如果包存储记录在cicle中,如5.000记录......

它是如何工作的?我可以配置吗?

1 个答案:

答案 0 :(得分:0)

如果你有异步/阻塞组件(排序/聚合),你的包可以尝试将所有500.000行缓冲到内存中,因为数据不能超过该点,直到每一行都被发送来自源头并已达到该组件。只有这样,SSIS才能确定列X的最大值,或者所有行都按键Y排序。

如果您的计算机内存不足,那么您将为溢出到磁盘的缓冲区(近似名称)记录一个事件。这意味着您在内存ETL引擎中的高性能现已开始将数据写入磁盘。此时性能将受到巨大影响,因为所有数据都会写入磁盘,以便您可以通过阻塞组件,猜猜是什么?现在必须从磁盘读回写入的数据,无论发生什么计算都已发生。如果你碰巧做了一些事情,比如在数据流中对数据进行排序,然后是汇总数据,那么你只需付出双倍的糟糕表现。

也就是说,如果您只使用同步组件,则数据流中会内置机制来检测背压。因此,您的目标目标无法跟上源流,它会发出信号通知该组件发送的记录较少,直到它能够赶上来。非常聪明的东西,但除非解决方案需要,否则作为开发人员的任何事情都不会影响,除非不添加asynchronous components