2009年1月11日 星期日

使用[查閱]轉換的注意事項

SQL Server 2005線上叢書說:"依預設,查閱轉換會將整個參考資料表放在記憶體的快取中,以提供最佳的效能。如果您未選取 [進階] 索引標籤上的任何選項,查閱轉換就會使用此預設行為。如果有記憶體限制,[進階] 索引標籤上的選項可讓您只設定部份快取。"


也就是說SSIS預設是幫你開啟快取的,這跟2000的DTS剛好相反喔,自己拉一個[查閱]轉換來看看囉,如上圖,屬性的CacheType預設是用完整快取的喔!各位看圖上似乎有三個選擇,這各部分線上叢書裡也有提到
參考資料集所需的記憶體可利用下列方式配置:
  • 全部預先快取,如此會在處理輸入之前先讀取完整的參考資料集。
  • 部份快取,轉換會指定隨參考資料載入的快取大小。此選項只有在使用支援索引鍵存取的連接時才提供。
  • 無快取,如此會按照資料列集中的各資料列存取參考資料集。
1.全部預先快取:預設是這個選項,預先幫你開快取,感覺很好,不過這只針對你查閱的參考資料表是屬於小型資料表的,對於大型資料表來說,如超過千萬筆資料的那種,這個不適用,怎麼說呢?
  假使你的來源就算只有兩筆資料好了,可是你查閱的參考資料表有千萬筆,那在執行查閱時,在執行前階段就會主動幫你把完整的資料快取起來,千萬筆資料耶,我自己測試的結果,一千多萬筆資料就把我剩餘的5G記憶體耗盡了,問題是快取都還沒完成耶,想當然封裝就失敗啦,所以遇到大型資料表,別用預設的選項吧,最好把快取關掉!
  若你使用預設的選項,執行中可以去看"進度"或執行完去看"執行結果",應該可以看到如下的內容,表示它真的幫你完整快取了
[DTS.Pipeline] 資訊: 正在開始執行前階段。
進度: 執行前 - 0 百分比完成
進度: 執行前 - 33 百分比完成
[查閱 [662]] 資訊: 元件 "查閱" (662) 已快取 910 個資料列。
[查閱 [662]] 資訊: 元件 "查閱" (662) 已快取 3380650 個資料列。
[查閱 [662]] 資訊: 元件 "查閱" (662) 已快取 6172530 個資料列。
[查閱 [662]] 資訊: 元件 "查閱" (662) 已快取 6621160 個資料列。
...

2.部分快取與無快取:在網路上看到是有人提到,當你查閱的參考資料只佔總參考資料表的一小部分,就選用部分快取吧﹔然後無快取是比較不建議的。不過我覺得這兩種很像啦,差別在哪老實說我試不太出來,部分快取還得配合記憶體限制,設的不恰當,根本就不幫你預先快取,還是直接存取資料庫啊,跟無快取沒兩樣,我個人是認為這兩種你得自己親自試試才比較清楚差別在哪囉!

0 意見:

張貼留言