Kettle性能調優彙總

       性能調優在整個工程中是很是重要的,也是很是有必要的。但有的時候咱們每每都不知道如何對性能進行調優。其實性能調優主要分兩個方面:一方面是硬件調優,一方面是軟件調優。本章主要是介紹Kettle的性能優化及效率提高。html

1、Kettle調優java

1  調整JVM大小進行性能優化,修改Kettle定時任務中的KitchenPan或Spoon腳本。mysql

修改腳本代碼片斷sql

set OPT=-Xmx512m -cp %CLASSPATH%  -Djava.library.path=libswt\win32\ -DKETTLE_HOME="%KETTLE_HOME%"  -DKETTLE_REPOSITORY="%KETTLE_REPOSITORY%"  -DKETTLE_USER="%KETTLE_USER%"  -DKETTLE_PASSWORD="%KETTLE_PASSWORD%"  -DKETTLE_PLUGIN_PACKAGES="%KETTLE_PLUGIN_PACKAGES%"  -DKETTLE_LOG_SIZE_LIMIT="%KETTLE_LOG_SIZE_LIMIT%"數據庫

參數參考:緩存

-Xmx1024m:設置JVM最大可用內存爲1024M
  -Xms512m:設置JVM促使內存爲512m。此值能夠設置與-Xmx相同,以免每次垃圾回收完成後JVM從新分配內存。
  -Xmn2g設置年輕代大小爲2G整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代通常固定大小爲64m,因此增大年輕代後,將會減少年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8
  -Xss128k:設置每一個線程的堆棧大小。JDK5.0之後每一個線程堆棧大小爲1M,之前每一個線程堆棧大小爲256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減少這個值能生成更多的線程。可是操做系統對一個進程內的線程數仍是有限制的,不能無限生成,經驗值在3000~5000左右。
性能優化

樣例:OPT=-Xmx1024m -Xms512m函數

 2  調整提交(Commit)記錄數大小進行優化post

如修改RotKang_Test01中的表輸出組件中的提交記錄數量參數進行優化,Kettle默認Commit數量爲:1000,能夠根據數據量大小來設置Commitsize1000~50000性能

3  調整記錄集合裏的記錄數

4、儘可能使用數據庫鏈接池;

5、儘可能提升批處理的commit size

6、儘可能使用緩存,緩存儘可能大一些(主要是文本文件和數據流);

7KettleJava作的,儘可能用大一點的內存參數啓動Kettle

8、可使用sql來作的一些操做盡可能用sql

      Group , merge , stream lookup,split field這些操做都是比較慢的,想辦法避免他們.,能用sql就用sql

9、插入大量數據的時候儘可能把索引刪掉;

10、儘可能避免使用update , delete操做,尤爲是update,若是能夠把update變成先delete,  insert

11、能使用truncate table的時候,就不要使用deleteall row這種相似sql合理的分區,若是刪除操做是基於某一個分區的,就不要使用delete row這種方式(不論是deletesql仍是delete步驟),直接把分區drop掉,再從新建立;

12、儘可能縮小輸入的數據集的大小(增量更新也是爲了這個目的);

13、儘可能使用數據庫原生的方式裝載文本文件(Oraclesqlloader, mysqlbulk loader步驟)

14、儘可能不要用kettlecalculate計算步驟,能用數據庫自己的sql就用sql ,不能用sql就儘可能想辦法用procedure,實在不行纔是calculate步驟;

15、要知道你的性能瓶頸在哪,可能有時候你使用了不恰當的方式,致使整個操做都變慢,觀察kettle log生成的方式來了解你的ETL操做最慢的地方;

16、遠程數據庫用文件+FTP的方式來傳數據,文件要壓縮。(只要不是局域網均可以認爲是遠程鏈接)。

2、索引的正確使用

ETL過程當中的索引須要遵循如下使用原則:

1、當插入的數據爲數據表中的記錄數量10%以上時,首先須要刪除該表的索引來提升數據的插入效率,當數據所有插入後再創建索引。

2、避免在索引列上使用函數或計算,在where子句中,若是索引列是函數的一部分,優化器將不使用索引而使用全表掃描。

3、避免在索引列上使用 NOT 「!=」,索引只能告訴什麼存在於表中,而不能告訴什麼不存在於表中,當數據庫遇到NOT 「!=」時,就會中止使用索引轉而執行全表掃描。

4、索引列上用 >=替代 >

      高效:select * from temp where deptno>=4

      低效:select * from temp where deptno>3

      二者的區別在於,前者DBMS將直接跳到第一個DEPT等於4的記錄然後者將首先定位到DEPTNO=3的記錄而且向前掃描到第一個DEPT大於3的記錄。

3、數據抽取的SQL優化

1Where子句中的鏈接順序。

2、刪除全表是用TRUNCATE替代DELETE

3、儘可能多使用COMMIT

4、用EXISTS替代IN

5、用NOT EXISTS替代NOT IN

6、優化GROUP BY

7、有條件的使用UNION-ALL替換UNION

8、分離表和索引。
相關文章
相關標籤/搜索