我想知道多播实际上是如何工作的。所以这是我的设置。我有一个大约 10 万行的源平面文件 (csv),可能大约有 250-300 列,我正在将该文件多播到 7 个一对一表中。这些表中只有主键列是重复的。这个设置似乎工作正常,但现在看来我们可能遇到了内存问题。我想知道将数据多播到 7 个目的地是否太多。关于内存使用的任何想法?我真的不在乎它的运行速度有多快,只是想减少内存使用量。
我想到的一种替代方法是可能只是为同一个文件创建 7 个不同的连接管理器,然后按顺序运行所有内容。那会更好吗?谢谢!
SSIS 通过成为内存中的转换引擎来获得强大的力量。数据流任务中的基本工作单元是缓冲区。如果您想知道为什么 SSIS 对数据类型如此挑剔,那是因为它计算一行的成本,然后为 N 行分配内存。*所有下游组件都使用相同的内存地址来完成它们的 ETL 部分,这允许并行化。这意味着具有 1 个输出的多播与具有 10 个输出的多播的成本相同。它只是允许多个组件使用数据。
我不能 100% 确定预多播的情况,我有一个名为 SSN 的专栏。在从MC输出1,I腐-5数字到位并写入到目的地和输出2与未改变的版本,必须有与该相关联的附加存储器的成本,但我假定它只是用于列所需的空间被复制。
*所有下游组件都使用相同的内存地址,直到您引入异步组件(排序、聚合等)。当那些命中数据流时,该缓冲区结束,数据从内存空间 1 复制到内存空间 2。从“我只是将列数从 100 减少到 10”的角度来看,这听起来不错,但你已经崩溃了“异步组件之前”和“异步之后”之间的总内存空间。您不能一次运行 100 个缓冲区,而是在 30 个之前和 70 个之后,并且中间的内存复制是一项昂贵的操作。
如果您想减少内存使用量,请构建您的包以减少使用量;)
WHERE ISCurrent = CAST(1 AS bit);