SSIS 數據流優化
一,數據流設計優化
數據流有兩個特性:流和在內存緩沖區中處理數據,根據數據流的這兩個特性,對數據流進行優化。
1,流,同時對數據進行提取,轉換和加載操作
流,就是在source提取數據時,轉換組件處理數據,同時destination加載數據,數據在不同組件之間,同時被處理。
所有的RDBMS操作都是同步的,基於集合的操作要求在將數據用於其他目的之前,該操作必須完成,這是由事務的原子特性決定的,然後數據流有流的特性,當數據流通過pipeline時,數據流task可以並行地處理鏈接,查詢以及其他轉換操作。在設計Data Flow時,要充分利用流的特性,限制同步過程。
例如,執行insert語句向Table1中插入數據,然後再運行update語句更新Table1,這意味著,直到insert腳本完成之前,是不能運行update語句的,insert 和 update 語句是同步的。
優化的設計方案是;設計一個數據流來實現與insert 語句相同的邏輯,同時使用轉換組件實現與Update語句相同的邏輯。
這種設計方案不會使用TSQL的insert 和 update語句,但是使用Data flow Task的Source,conversion 和 destination,充分利用了數據流的流的特性。在數據提取的同時,轉換組件對數據流進行轉換,實現數據的“insert”和“Update”同時進行,減少整體的處理時間。
有時,使用RDBMS會更快,例如,如果表中有合適的index,使用order by 子句對數據進行排序,會比SSIS 排序轉換要快很多。
2,SSIS Engine使用內存緩沖區來暫時存儲數據流
SSIS Engine使用內存緩沖區來暫時存儲數據流,對駐留在內存中的數據執行大多數的轉換操作,這使得SSIS的數據處理效率非常高,應避免SSIS將數據流·駐留在Disk或其他IO速度非常低的存儲介質上。
當Server內存不足時,SSIS就將緩沖區復制到Disk中,Disk IO的速度遠低於RAM的IO 速度,這會導致package的運行速度將大大降低,其中最密集的內存轉換時阻塞和半阻塞轉換。所以,必須監控阻塞和半阻塞轉換的內存使用情況,避免出現內存過低的情況。
二,數據流轉換優化
1,緩沖區和執行樹
針對數據流中的每個執行樹,都使用了一個不同的緩沖區配置文件,這意味著執行樹下遊的組件可能會根據處理邏輯的不同而需要不同的Column set。因為數據流的緩沖區的性能直接和緩沖區的行寬相關聯,窄緩沖區可以容納更多的數據行,從而允許更高的數據流吞吐量。
上遊執行樹所使用的columns可能並不是下遊執行樹所需要的,當執行樹中的列不在被任何下遊執行樹使用時,SSIS會提供相應的警告。每一個警告表示某一列在下遊組件中不再被使用,英愛在初始使用後,從Pipeline中刪除。任何異步轉換輸出的組件,都可以選擇刪除輸出中的column。
2,Engine Thread
通過為數據流增加更多的執行線程,提高CPU的利用率。將數據流屬性EngineThreads屬性的值設置為大於執行樹的數量和組件的數量,從而確保SSIS有足夠的線程可供使用。
SSIS 數據流優化