“输出”Output0“(5)上的输出列”A“(67)和组件”数据流任务“(1)随后未在数据流任务中使用。删除此未使用的输出列可以增加数据流任务表现。“
请解决我的问题
答案 0 :(得分:3)
这些警告表示您的数据流中有未使用的列。数据流的工作原理是分配固定大小内存的“桶”,用源中的数据填充它,并允许下游组件直接访问内存地址以执行同步转换。
内存是一种有限的资源。如果SSIS检测到有1 GB要使用,而一行数据将花费4096 MB,那么在耗尽内存空间之前,管道中最多可能有256行数据。这256行将分成N个行,因为尽可能多,您希望在使用数据库时执行基于集合的操作。
为什么这一切都很重要? SSIS会检测您是否已经使用了您带入管道的所有内容。如果它从未使用过,那么你就是在浪费记忆力。通过排除未使用的列,您可以将每行所需的内存量减少到1024 MB,而不是通过排除未使用的列来计算4096的单行,现在只需按照您的需要即可在管道中拥有1024行。
你是如何到达那里的?在数据源中,编写查询而不是选择表。不要使用SELECT * FROM myTable
,而是显式枚举所需的所有列,仅此而已。平面文件源也是如此---取消选中从未使用过的列。你仍然需要读取整行的磁盘惩罚,但他们不必点击你的DF并消耗那个内存。任何查找都有相同的故事 - 只查询您需要的数据。
Asynchronous components是最后要注意的事情,因为这已成为对性能的抨击。上面的计算很像新生微积分类:假设一个牛是一个使数学更容易的球体。异步组件导致您的内存在组件之前和之后被拆分。它们从根本上改变了通过组件的行的形状,使得下游组件不能重用其上方的地址空间。这导致物理内存复制,这是一个缓慢的操作。
我最后的评论是,如果你的包裹表现得足够好,在可接受的时间范围内完成,除非你没有别的事情要做,留下它并继续你的下一个任务。这些只是警告,不应该“长大”到完全错误。