設計 SSIS 封裝採用平行處理原則 (SQL Server 影片)
適用於::Microsoft SQL Server Integration Services |
作者:Matt Carroll,Microsoft Corporation |
影片長度:00:12:37 檔案大小:29.2 Mb 檔案類型:WMV 檔案 |
|
影片摘要
本影片將說明如何設計您的 Integration Services 封裝採用平行處理原則,進而提高封裝效能。
影片致謝
謝謝 Thomas Kejser 對本系列「SQL Server 系列影片:SSIS 之效能設計與微調」在使用材料上的貢獻。本影片是這一系列影片中的第四部。
謝謝 Carla Sabotta 和 Douglas Laudenschlager 的指導與寶貴意見。
影片技術提示
附註: |
---|
技術提示係摘錄自影片。 |
平行處理設計的原則:對問題進行資料分割、消除衝突,以及有效率地排程。
平行處理設計的概念是將大規模的問題切割成小而獨立的片段,然後再分散工作。以 Integration Services 而言,將問題分解成小片段的意思,就是對要處理的資料進行資料分割。您應該要試著將這些資料分割保持相同的大小,這樣會更容易進行最佳排程和散發。
接著,您必須消除這些小型工作之間的衝突,讓它們能平行進行而不會互相干擾。您應該要採用無狀態的設計,也就是工作的各個單位都各自獨立,不需任何外部事項參與便可自行完成作業。此外,您也應該要減少對外部資源的爭用。
最後,您必須將這些獨立的小型工作分散開來進行,以便更快完成它們。也就是說,您要排程並散發這些工作,這樣才能有效率地使用您最關鍵的資源,這也代表要聰明地運用時間,不要讓耗時的工作佔用執行階段。假設您有如同甘特圖一般的工作需要完成,便應該平衡工作負載,讓所有工作都能盡早完成。
將問題資料分割
您應該要對來源資料進行資料分割,將其劃分為大小差不多的小區塊。您可以根據資料原本的範圍來分割,例如依時間或地理位置;或者,如果有識別資料行的話,您也可以將其中的值模數化,用來識別各個資料分割。再不然,您可以回頭對索引鍵資料行套用雜湊函數來產生資料分割。
除了對來源資料表進行資料分割外,您也要根據來源資料的資料分割來資料分割目的地資料表。SQL 的 SWITCH 命令則提供了非常有效率的機制,可用來在資料表中新增和移除資料分割。
消除衝突
將問題資料分割後,您必須消除這些資料分割間任何的可能衝突。因此建立一個無狀態的設計便非常重要,因為這樣可以避免複雜的互動,進而避免產生衝突。為了確保封裝的設計為無狀態,您應該將執行作業所需的所有資訊傳入其中。
請記得避免鎖定爭用,在同一個資料表插入許多連接,最終會導致爭用。為了避免這個情況,請使用資料分割好的資料表,並善用 SQL SWITCH 命令的優點。
請留意是否有任何控制硬體的爭用。如果磁碟的 I/O 會有問題,請移往更多或更快的磁碟;如果網路的 I/O 會有問題,請新增或升級網路控制卡;如果 CPU 或記憶體使用會有問題,請在具有更多處理器或記憶體的電腦上執行,或在多個電腦上執行。同時請記住,Integration Services 設計為在記憶體中執行,因此請確認每個封裝都有足夠的記憶體可用。
有效率地排程
將問題資料分割為較小的工作,並消除這些工作間的衝突後,您便應該排程並有效率地執行這些工作。想要建立效率良好的排程,可以從定義完成工作的優先順序佇列開始,而 SQL 資料表就非常適合這個目的。
接著,請啟動您為了執行工作而建置的多個封裝複本。利用 Windows 的 START 命令來叫用 dtexec.exe,便可簡單又有效率地達到這個目的。您所使用的平行處理原則程度,則要視您啟動的封裝數目而定。
每個這些封裝都會根據優先順序去處理工作佇列中的工作,直到完成所有工作為止。封裝內會有一個迴圈先去從優先順序佇列中取得某件工作,然後執行該工作所定義的工作,如此一再反覆,直到工作佇列變空為止。
示範
在第一輪示範中,是由單一個封裝執行個體依順序處理每一項工作。
在第二輪示範中,會有兩個處理序平行進行。這些工作會以兩個批次完成,同時執行示範所需的時間會縮減到將近一半,從 64 秒變成只需 36 秒。
在第三輪示範中,會有四個處理序平行進行。每個工作的執行時間會從 9 秒提高為大約 14 秒,但總執行時間則會從 36 秒下降為大約 28 秒。
在最後一輪示範中,則會有八個處理序平行進行。因為所有的工作都會同時進行,因此每一項工作的執行時間會提高到大約 27 秒,而總執行時間則會跟四個處理序的時間差不多。這是因為這時所有八個處理序彼此會爭用資源,嘗試從磁碟讀取所需的資料檔案,因此達到了磁碟 I/O 的瓶頸。要解決這個問題,我們可以將檔案分散在不同的磁碟和控制器上,或是將工作移到更快速的磁碟技術上執行。