2014-03-12 106 views
0

在ssis Dataflow中有一個查找組件,該查找組件在一張擁有1800萬條記錄的表上進行查找。我已經使用完全緩存配置了查找。SSIS查找失敗

Default buffer size :20485760 
Default Buffer Max rows: 100000 
The lookup join is based on an ID column of varchar(13)type 

它給出了一個錯誤,如圖below.What查找配置適合緩存這些多條記錄

Error: The buffer manager cannot write 8 bytes to file "C:\Users\usrname\AppData\Local\Temp\16\DTS{B98CD347-1EF1-4BC1-9DD9-C1B3AB2B8D73}.tmp". There was insufficient disk space or quota. 

這將是在性能上的區別,如果我使用查找無緩存? 我的確瞭解到,在完全緩存模式下,數據在預執行階段之前被緩存,並且不必返回到數據庫。此完整緩存內存需要大量內存併爲數據流添加附加啓動時間。我的問題是我有什麼配置設置,以處理全緩存模式大量數據

請告訴我解決辦法,如果查找表中有千萬條記錄(以及他們在整個緩存不配合)

回答

0

使用改爲合併連接組件。對連接鍵上的兩個輸入進行排序,根據您的規範指定內部/左側/完整連接。使用不同的輸出來獲得查找組件等功能。

合併連接通常在較大的數據集上執行得更好。

+0

但是..它會降低性能嗎?排序是一個昂貴的操作,在這種情況下,我也需要使用2個排序組件! – user1254579

+1

在源系統中排序比在ssis中同時使用查找和排序組件要快得多。對源進行排序(使用SQL語句,ORDER BY)並使用高級編輯器指定輸出已排序,並指定排序鍵。合併加入將選取這個元數據並應用這些鍵自動加入。 – cairnz

+1

詳情請參閱這裏:http://www.ssistalk.com/2009/09/17/ssis-avoiding-the-sort-components/(編輯評論太晚了) – cairnz

0

可以在SSIS設置BufferTempStoragePath屬性的一些fastdrives爲脫機BLOBTempStoragePath和buffertempstoragepath的將使用臨時TMP系統變量。因此,如果tmp變量無法在您的情況下保存大數據集,則使用查找轉換。所以大數據集將使用驅動器空間並將爲您執行這項工作。

+0

我不認爲這回答了這個問題。 – thomasb