1.
問題分析1.1
問題場景在生產環境下,從V7\V8等多個交易系統通過( Integration Services)進行服務平臺的數據抽取時出現性能問題。在初期使用過程中出現了數據抽取速度過慢和系統資源佔用過高的問題,除基礎架構建設存在優化可能外,SSIS未做面向生產環境硬件的優化也是一個重要原因,導致無法正常發揮SSIS真正性能。
1.2
原因分析SSIS採用VS2005集成的開發環境,對數據採集的過程可進行可視化的定製開發,對數據量小的表(字典表)可同時並行抽取多個,以加快抽取速度,而對於大的事實表(業務表)可採用串行化抽取,對於數據量較大的表,採用串行化方式提取。
在分析開發人員開發的SSIS 包時,主要發現幾個與性能有關的參數值設置問題:
1.事實上在大數據量操作時,將大事務拆解成小事務是實踐證明的最高效的處理方式,如把數據提交放在一個很大的事務中,就會出現事務保持和回滾需要更多的資源和時間,並造成物理內存不足,且更容易出錯。
2.線程做爲操作系統爭用CPU資源的系統對象,本身會花費一定的CPU時間進行線程切換與同步,所以線程數不應比物理CPU數量多太多,考慮到操作系統本身和其他運行中的對CPU的佔用,甚至要略少於物理CPU。
3.SSIS提供不檢查check約束和觸發器的快速加載方式(Fast load),可提高數據寫入的速度,對於不需要嚴格審查的數據比較適用。
1.3
參數優化建議以下的章節提供了一些較爲常用的SSIS執行性能優化的參數和建議,以供調優參考。由於目前我們缺少大數據量的模擬環境,建議在生產環境中調整參數時,循序漸進,逐步調整。
2.
優化包參數2.1
MaxConcurrentExecutablesMaxConcurrentExecutables是包的屬性,它定義有多少個任務能被同時運行
如果值爲-1的話就意味着同時可以運行的任務數爲當前處理器的個數加上2
當超線程被打開的時候,它是邏輯處理器的個數
3.
控制流參數3.1
MaxConcurrent這是ForEachLoop組件的一個屬性,意味着有多少個循環實例能並行運行
4.
數據流參數
4.1
EngineThreads 屬性 這是數據流任務中的屬性,它定義有多少個工作線程在引擎調度時可以被使用。缺省值爲5,可設置範圍爲2-60之間,建議根據物理CUP個數調高到總CUP個數左右。如雙核8C的,可設置爲15-17個左右,具體應依實際對比測試性能而定。
注:多核處理器應當算作多個處理器。
4.2
DefaultBufferMaxRows屬性SSIS數據流引擎可以通過計算一行數據的估計大小來調整其緩衝區大小的任務。 引擎將估計的單行大小與 DefaultBufferMaxRows 值相乘以獲得緩衝區大小的初步工作值。可計算出單行數據大小,乘以每次提交數據的行數,得到適當的緩衝大小
1、如果該結果大於 DefaultBufferSize 值,引擎將減少行數。
2、如果該結果小於內部計算的最小緩衝區大小,引擎將增加行數。
3、如果結果在最小緩衝區大小和 DefaultBufferSize 值之間,引擎將調整緩衝區大小,以儘可能接近估計行大小乘以 DefaultBufferMaxRows 值得出的結果。
4、默認緩衝區大小爲 10 MB,最大緩衝區大小爲 100 MB。 默認最大行數爲 10,000。
4.3
DefaultBufferSize屬性此參數應與DefaultBufferMaxRows配合使用。
4.4
BufferTempStoragePath屬性
爲緩衝區數據指定臨時存儲位置。默認情況下,這些屬性包含 TEMP 和 TMP 環境變量的值。您可能希望指定不同或更快的硬盤驅動器上的其他文件夾來存放臨時文件,或將它們分佈在多個驅動器上。可以指定多個目錄,並用分號來分隔這些目錄名。
4.5
BLOBTempStoragePath屬性爲包含二進制大型對象 (BLOB) 數據的列指定臨時存儲位置。默認情況下,這些屬性包含 TEMP 和 TMP 環境變量的值。您可能希望指定不同或更快的硬盤驅動器上的其他文件夾來存放臨時文件,或將它們分佈在多個驅動器上。可以指定多個目錄,並用分號來分隔這些目錄名。
4.6
數據流目標參數設置建議在選用OLEDB做爲數據目標時,可將數據訪問模式可設置爲:表或視圖-快速加載,每批行數可設爲1000、5000、10000、20000、50000做分別的性能對比測試。
另外,也建議使用SQL Server目標做性能對比測試,一般情況下SQL Server目標性會比OLE DB目標更好。
5.
模擬測試5.1
測試環境服務器配置: XSERIES_3755 Dual-Core AMD Opteron(tm) Processor 8212
CPU 2G X 4 Dual-Core
內存8G
存儲 本地SCSI
Windows 2003 SP2 R2企業版
OLTP數據庫:Sybase 12.5
數據庫:SQL Server2005企業版SP2
網絡:100M
5.2
模擬測試對比批行數設置爲1000時的幾組測試數據對比:
最佳性能的測試指標爲220秒(3分40秒),數據筆數255,8374條,數據約900M
5.3
結論
問題分析1.1
問題場景在生產環境下,從V7\V8等多個交易系統通過( Integration Services)進行服務平臺的數據抽取時出現性能問題。在初期使用過程中出現了數據抽取速度過慢和系統資源佔用過高的問題,除基礎架構建設存在優化可能外,SSIS未做面向生產環境硬件的優化也是一個重要原因,導致無法正常發揮SSIS真正性能。
1.2
原因分析SSIS採用VS2005集成的開發環境,對數據採集的過程可進行可視化的定製開發,對數據量小的表(字典表)可同時並行抽取多個,以加快抽取速度,而對於大的事實表(業務表)可採用串行化抽取,對於數據量較大的表,採用串行化方式提取。
在分析開發人員開發的SSIS 包時,主要發現幾個與性能有關的參數值設置問題:
1.事實上在大數據量操作時,將大事務拆解成小事務是實踐證明的最高效的處理方式,如把數據提交放在一個很大的事務中,就會出現事務保持和回滾需要更多的資源和時間,並造成物理內存不足,且更容易出錯。
2.線程做爲操作系統爭用CPU資源的系統對象,本身會花費一定的CPU時間進行線程切換與同步,所以線程數不應比物理CPU數量多太多,考慮到操作系統本身和其他運行中的對CPU的佔用,甚至要略少於物理CPU。
3.SSIS提供不檢查check約束和觸發器的快速加載方式(Fast load),可提高數據寫入的速度,對於不需要嚴格審查的數據比較適用。
1.3
參數優化建議以下的章節提供了一些較爲常用的SSIS執行性能優化的參數和建議,以供調優參考。由於目前我們缺少大數據量的模擬環境,建議在生產環境中調整參數時,循序漸進,逐步調整。
2.
優化包參數2.1
MaxConcurrentExecutablesMaxConcurrentExecutables是包的屬性,它定義有多少個任務能被同時運行
如果值爲-1的話就意味着同時可以運行的任務數爲當前處理器的個數加上2
當超線程被打開的時候,它是邏輯處理器的個數
3.
控制流參數3.1
MaxConcurrent這是ForEachLoop組件的一個屬性,意味着有多少個循環實例能並行運行
4.
數據流參數
4.1
EngineThreads 屬性 這是數據流任務中的屬性,它定義有多少個工作線程在引擎調度時可以被使用。缺省值爲5,可設置範圍爲2-60之間,建議根據物理CUP個數調高到總CUP個數左右。如雙核8C的,可設置爲15-17個左右,具體應依實際對比測試性能而定。
注:多核處理器應當算作多個處理器。
4.2
DefaultBufferMaxRows屬性SSIS數據流引擎可以通過計算一行數據的估計大小來調整其緩衝區大小的任務。 引擎將估計的單行大小與 DefaultBufferMaxRows 值相乘以獲得緩衝區大小的初步工作值。可計算出單行數據大小,乘以每次提交數據的行數,得到適當的緩衝大小
1、如果該結果大於 DefaultBufferSize 值,引擎將減少行數。
2、如果該結果小於內部計算的最小緩衝區大小,引擎將增加行數。
3、如果結果在最小緩衝區大小和 DefaultBufferSize 值之間,引擎將調整緩衝區大小,以儘可能接近估計行大小乘以 DefaultBufferMaxRows 值得出的結果。
4、默認緩衝區大小爲 10 MB,最大緩衝區大小爲 100 MB。 默認最大行數爲 10,000。
4.3
DefaultBufferSize屬性此參數應與DefaultBufferMaxRows配合使用。
4.4
BufferTempStoragePath屬性
爲緩衝區數據指定臨時存儲位置。默認情況下,這些屬性包含 TEMP 和 TMP 環境變量的值。您可能希望指定不同或更快的硬盤驅動器上的其他文件夾來存放臨時文件,或將它們分佈在多個驅動器上。可以指定多個目錄,並用分號來分隔這些目錄名。
4.5
BLOBTempStoragePath屬性爲包含二進制大型對象 (BLOB) 數據的列指定臨時存儲位置。默認情況下,這些屬性包含 TEMP 和 TMP 環境變量的值。您可能希望指定不同或更快的硬盤驅動器上的其他文件夾來存放臨時文件,或將它們分佈在多個驅動器上。可以指定多個目錄,並用分號來分隔這些目錄名。
4.6
數據流目標參數設置建議在選用OLEDB做爲數據目標時,可將數據訪問模式可設置爲:表或視圖-快速加載,每批行數可設爲1000、5000、10000、20000、50000做分別的性能對比測試。
另外,也建議使用SQL Server目標做性能對比測試,一般情況下SQL Server目標性會比OLE DB目標更好。
5.
模擬測試5.1
測試環境服務器配置: XSERIES_3755 Dual-Core AMD Opteron(tm) Processor 8212
CPU 2G X 4 Dual-Core
內存8G
存儲 本地SCSI
Windows 2003 SP2 R2企業版
OLTP數據庫:Sybase 12.5
數據庫:SQL Server2005企業版SP2
網絡:100M
5.2
模擬測試對比批行數設置爲1000時的幾組測試數據對比:
DefaultBufferMaxRows | DefaultBufferSize | EngineThreads | 已用時間 | 數據量 | 數據大小 |
10000 | 20971520 | 5 | 2125.53秒 | 2558374條 | 923560 KB |
10000 | 10485760 | 5 | 1818.7 秒 | 2558374條 | 923560 KB |
1000 | 10485760 | 6 | 220.891秒 | 2558374條 | 923560 KB |
1000 | 10485760 | 7 | 220.438 秒 | 2558374條 | 923560 KB |
1000 | 10485760 | 8 | 236.047秒 | 2558374條 | 923560 KB |
最佳性能的測試指標爲220秒(3分40秒),數據筆數255,8374條,數據約900M
5.3
結論
測試對比結果表明,設置適合的緩衝大小,採用較小的事務提交,並使用適當的線程數可數十倍地提高SSIS包的ETL任務執行速度。