2013-07-09 42 views
-2

「輸出」Output0「(5)和組件」數據流任務「(1)上的輸出列」A「(67)未隨後在數據流任務中使用。輸出列可以提高數據流任務的性能。「未隨後使用的數據流任務警告

請解決我的問題

+0

請解釋你的問題... –

+0

想要移除警告像提高性能 – USER9999

回答

3

這些警告表明您有不使用你的數據流列。數據流的工作原理是分配固定大小內存的「桶」,用來自源的數據填充它,並允許下游組件直接訪問內存地址以執行同步轉換。

內存是有限的資源。如果SSIS檢測到有1 GB可用,一行數據將花費4096 MB,那麼在內存空間不足之前,最多可以有256行數據。這256行將被拆分爲N行,因爲儘可能多的,你想要在使用數據庫時執行基於集合的操作。

爲什麼這一切都很重要? SSIS會檢測您是否使用過所有已引入流水線的內容。如果它從未被使用過,那麼你正在浪費記憶。通過排除未使用的列,而不是單個行花費4096,您可以將每行所需的內存量減少到1024 MB,而現在只需要採取所需的操作就可以在流水線中擁有1024行。

你如何到達那裏?在你的數據源中,寫一個查詢而不是選擇一個表。請不要使用SELECT * FROM myTable,而是明確列舉所需的所有列,僅此而已。平面文件源也一樣 - 取消選中從不使用的列。您仍然會因爲必須讀取整行內容而受到損失,但他們不必擊中DF並消耗該內存。任何查找都是同樣的故事 - 只查詢您需要的數據。

Asynchronous components是最後要注意的事情,因爲這已經變成了對性能的謾罵。上面的計算和新生的微積分類非常相似:假設牛是一個使數學變得更容易的球。異步組件導致您的內存在組件之前和之後被拆分。它們從根本上改變了通過組件的行的形狀,使得下游組件不能重新使用它上面的地址空間。這導致物理內存拷貝是慢速操作。

但我的最終評論是,如果你的軟件包運行正常,在可接受的時間範圍內完成,除非你沒有別的事要做,離開它並繼續下一個任務。這些只是警告,不應該「長大」到全面的錯誤。

+0

+1爲教育答案;但不會4096 KB是比4096 MB更典型的示例行大小? – criticalfix

+0

@criticalfix真的和最初我曾經使用知識庫,但後來決定我不想做額外的轉換數學;) – billinkc

相關問題