-2

“输出“Output0”(5) 和组件“数据流任务”(1) 上的输出列“A”(67) 随后不会在数据流任务中使用。删除这个未使用的输出列可以提高数据流任务的性能。 "

请解决我的问题

4

1 回答 1

5

这些警告表明您的数据流中有未使用的列。数据流的工作原理是分配固定大小的内存“桶”,用来自源的数据填充它,并允许下游组件直接访问内存地址以执行同步转换。

内存是一种有限的资源。如果 SSIS 检测到有 1 GB 可用,而一行数据将花费 4096 MB,那么在内存空间用完之前,管道中最多可以有 256 行数据。这 256 行将被拆分为 N 个行桶,因为您希望在使用数据库时尽可能执行基于集合的操作。

为什么这一切都很重要?SSIS 会检测您是否使用了已引入管道的所有内容。如果它从未使用过,那么你就是在浪费内存。通过排除未使用的列,而不是花费 4096 的单行,您将每行所需的内存量减少到 1024 MB,现在您只需获取所需的内容即可在管道中拥有 1024 行。

你怎么到那的?在您的数据源中,编写查询而不是选择表。不要使用SELECT * FROM myTable,而是明确枚举您需要的所有列,仅此而已。平面文件源也是如此——取消选中从未使用的列。您仍然会因为必须读取整行而付出磁盘代价,但它们不必击中您的 DF 并消耗该内存。任何查找都是同样的故事 - 只查询您需要的数据。

异步组件是最后需要注意的事情,因为这已经变成了对性能的诽谤。上面的计算很像新生的微积分课:假设一头牛是一个球体,以使数学更容易。异步组件会导致您的内存在组件之前和之后被拆分。它们从根本上改变了通过组件的行的形状,使得下游组件无法重用其上方的地址空间。这会导致物理内存复制,这是一个缓慢的操作。

不过,我最后的评论是,如果您的包裹表现良好,在可接受的时间范围内完成,除非您无事可做,否则请继续执行下一个任务。这些只是警告,不应“发展”成全面的错误。

于 2013-07-09T12:18:35.910 回答