傳統資料倉儲項目的最佳化手段 (針對 Oracle+DataStage )

來源:互聯網
上載者:User

標籤:

普通手段分區,HASH-JOIN,資料倉儲函數,物化視圖,位元影像索引等等為大夥在資料倉儲常用的技術,而下面列舉的tips為項目中常用的最佳化手段/技巧,綠色背景highlight的部分屬於 非常規手段,使用情境較為極端,需謹慎考量。  Oracle並行情境:
  • SQL*Loader 的parallel參數
  • 事務失敗復原的平行處理 FAST_START_PARALLEL_ROLLBACK參數
  • expdp設定parallelism參數,設定多個datapump檔案
  • 大批量處理+平行處理(parallel),減少select次數,邏輯清晰,儘可能一次select……jion 之後再進行統一分析函數的處理, select   /*+ PARALLEL(Table_Name,並行數) */   統計函數 sum avg   case when then else end   over(partition by order by )  分析函數 lead/lag,rank,ratio_to_report,Period-over-period comparisons 等等...from   Table_Namegroup by
    rollup ,cube 等等...
  • 建立索引、rebuild、設定並行參數(譬如大批量ETL全量時,drop索引,ETL之後再create)
  • 收集統計資訊的 degree參數
  • 還有aleter session enable parallel dml;
       insert /*+ append parallel(Table_I,並行數) */
         into Table_I nologging 
           select /*+ PARALLEL(A,並行數) PARALLEL(B,並行數) PARALLEL(C,並行數) */ 
           ……
nologging 在DML時往往很有用   Insert、updateInsert ,update,delete 情境
1、當然最快的仍然是create table NEW_TAB  as select * from OLD_TAB 2、delete的時候如果資料量過大,可以權衡考慮全量匯出建立:CREATE TABLE NEW_TAB NOLOGGING PARALLEL as select * from OLD_TAB where 條件<>要delete的資料,再truncate原表,rename重新命名新表。 update也可以同理,把update的思路寫到select裡面再truncate原表,rename新表。  MERGE:(同樣可以使用並行,nologging   減少掃描表的次數,替代insert then update語句  例如:每月計算生產庫裡的會計科目成本,放入資料倉儲的事實表,但有少部分的沖銷憑證會影響近幾個月的操作。原本的total delete+insert,或是insert新資料+時間範圍內update的操作,換為merge where 時間覆蓋可能發生沖銷的範圍即可。  參數:1、alter session set workarea_size_policy=manual;alter session set sort_area_size=107341824;alter session set sort_area_retained_size=107341824;alter session set db_file_multiblock_read_count=128;在並行dml、並行select的ETL JOB裡可以添加如上參數,10g版本似乎要重複兩次才可以生效。db_file_multiblock_read_count配合32k、16k的大block資料表空間使用,針對傳統SATA盤,FC盤有效,增加單次IO的收益。 同理,有時候反範式冗餘多維度與事實表到一塊,組成長表,db_file_multiblock_read_count+32K/16K大block的效能也很好,但資料的適用情境就減少了,多數用於臨時主題分析,資料集市。 2、修改參數 _smm_auto_min_io_size 、smm_auto_max_io_size增大每次hash join 的記憶體配置大小,提升group by效能,配合大PGA使用。 3、 極端環境下(或測試環境,或是同步資料的非關鍵過渡庫),開啟參數 alter system set commit_write=‘batch,nowait‘; (10gR2開始才有的特性)使得db在commit的時候,無需等待 LOG BUFFER寫出到REDO LOGFILE,即返回commit完成,需要評估災難時斷電帶來的風險,如有UPS可考慮開啟。 注意:極端環境是指頻繁的commit帶來的log file sync等待成為瓶頸點的時候才 考慮,才考慮!開啟參數,多數情況下資料倉儲不會有這個問題。
再極端一些,還可以把Online Redo檔案加大至1~2G甚至更大,關閉歸檔,減少日誌切換帶來的等待,本條需要權衡情境,勿在生產環境隨意使用。 外部表格
  • 不能dml,不能建索引,不支援分區
  • 適合只使用一次,無需修改,方便load入資料,可以並行查詢,可以Nested_Loop JOIN,可以HASH_JOIN
  • 外部表格結合MERGE的情境
系統級暫存資料表(無DML鎖,無REDO)  TRANSACTION級  SESSION級 direct path insert   物化視圖:空間換取時間   資料表空間遷移可以傳輸分區表的分區,屬於物理檔案層級的傳輸,不同於SQL層級,屬於最高效能,適用於跨地區的分庫、子庫匯總至中心庫的情境。   DataStage方面的處理
1、Bulk load方式
讀端:設定 enable partitioned reads ,modulus方式分區讀取integer(zeile)
寫端:oracle connect 選擇bulk load方式
在bulk load寫入前把所有索引,主鍵等drop掉。結束後再重建。DataStage主機在多CPU的情況下,推薦設定 多個並行node進行ETL作業,輕鬆將IO壓到極限。 
 Before SQL StatementAfter SQL Statement Node的設定 多Node並行的效果如:    如果在瓶頸在Datastage的Node上(可以測試下,node的檔案建立在linux的tmpfs,即/dev/shm/tmp來提速,避免在ETL過程中資料經過datastage主機的磁碟,增加io瓶頸點,主機的記憶體要足夠大,如64G,需測試!)# mkdir /dev/shm/tmp# chmod -R 777 /dev/shm/tmp# mount --bind /dev/shm/tmp /tmp像這樣就可以直接用/tmp 來做node檔案存放使用。 考慮限制用量的情況也可以用 # mount tmpfs /tmp -t tmpfs -o size=512m限制/tmp掛載的tmpfs只能用512m 同理,大記憶體主機下Oracle的 temp資料表空間也可以往這裡放,前提是temp資料表空間的使用方式已經平穩,DBA能預估使用的波動範圍,並且關掉自動成長。需嚴格測試!

傳統資料倉儲項目的最佳化手段 (針對 Oracle+DataStage )

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.