[SAP HAAN]SAP HAAN delta merge 詳解


本文詳細描述了SAP HANA delta merge的技術

  • 什么是Delta merge,為什么要進行Delta merge,
  • Data merge的分類
  • Data merge的手動操作
  • Merge 的相關設置
  • Delta Merge監控
  • Merge 的過程

 

 1.什么是Delta merge,為什么要進行Delta merge,

SAP HANA 的數據表(行存儲/列存儲)都會有兩塊區域用以存入數據,並定期進行合並.這兩下區域是Main Store和Delta Store,設定這兩塊區域的目的是使高壓縮比率和更快寫效率.

Main store 內的數據是有很高壓縮比率(通過創建字典和其它壓縮方法實現高壓縮比)的,有着更快的查詢和計算,但是寫的成本很高.

 

Delta 內存區域是對數據庫的寫優化設計的;存放在delta 區域中的數據會定期合並並加入到Main內存區域中,這個過程在SAP HANA 環境中稱為delta merge,就是將內存中的數據提交到數據庫表中.

在內存合並(Delta Store)過程中,系統中CPU和內存會有大量的消耗,因此需要對合並的過程加以控制,不能讓Merge進程使用當前系統全部的可用資源,因此每個Merge進程都需要得到下令牌(Merge token)(一個令牌都代表一個單個CPU),如果所有的merge token都占用了,那么下一個merge請求將需要等待之前的某個merge toker 被釋放之后才能開始Merge進程.

2.Data merge的分類:

  • Auto Merge 是HANA的標准觸發Merge方式 ,HANA中的"Mergedog' 系統進程會定期檢查數據庫表的Delta內存區域是否有數據,然后完成Delta Merge.
  • Smart Merge 是一種智能的自動觸發Merge方式, SAP HANA提供了這樣的一個功能,用戶能夠在系統中靈活定義一些觸發條件,一但條件滿足就開始執行Merge過程   例如:系統中給Delta內存區域定義一個閾值,一旦Delta區域國的數據量超過多少MB,就自動觸發Data Merge
  • Memory Merge SQL 語句觸發,並且指定在內存中進行合並的方式,合並之后的數據不會寫入持久層   merge DELAT OF <db_table> WITH PARAMETERS('MEMORY_MERGE'='ON')
  • Hard Merge 這是使用SQL語句觸發並且不設定任何條件的Merge 方式 ,但是只有成功從系統中獲得令牌之后,才能開始Merge
  • Force Merge 和Hard merge類似,但無須取得令牌就可以Merge
  • Critical Merge 這是為了保持系統穩定性能而設定的Merge 方式 : 設定場景:Auto Merge 關閉了,此時也沒有手動的Merge 被觸發,當Delta內存區域中數據增長到足以觸發一次Smart Mege 時,Critical Merge 會觸發一個Delta Mege 請求

3.Data merge的手動操作

    HANA studio ,右擊數據表,選擇 "Merge..."  

MERGE DELAT OF "HANA_TPC"."CUSTOMER" #直接合並
MERGE DELAT OF "HANA_TPC"."CUSTOMER" WITH PARAMETERS('SMART_MERGE'='ON') #啟動表的SMART MERGE
MERGE DELAT OF "HANA_TPC"."CUSTOMER" PART <分區ID> #直接對表的某個分區進行合並,減少合並的范圍,加快合並進程,從而降低對系統資源的消耗

 4.Merge 的相關設置

4.1 配置參數:   index server -->mergedog

  • mergedog active = yes 不要修改
  • Auto Merge設置   
    check_interval = 60000 #每隔16.6小時執行一次
  • Smart Merge設置   
    smar_merge_enabled = yes 
                            #開戶中smart Merge
    smart_merge_decision_func = MMS<1000 or DMS>1000 or DRC>0.1*MRC or DMR>0.1*MRC or DLS>5000 
                           #DMS>1000 數據表的delta內存區域超過1000MB,如果向數據表寫入1GB大小的數據,而且這些數據是以insert only 方式寫入Delta內存區域,那么數據檢查超過1000MB,就會觸發Merge進程
    #DMR>0.1*MRC 如果從Mainm內存區域刪除超過1/10的數據,那么系統就會觸發Merge 進程
    # DLS>5000 如果Delta內存區域的日志超過5000MB,那么系統就會觸發Merge 進程
  • Merge Token 的設置:系統執行每個合並請求所需的令牌數據是由系統自動算的.如果當前系統無法計算出應該使用多少令牌數去執行某個合並請求,那么系統就返回一個默認值.

    token_per_table=2 #不要修改
    load_balance_func=1+LCC*(AHM/THM)*(100-CLA)/100 #系統可用Merge 令牌總數的配置參數
  • Merge 並發進程配置
    parallel_merge_threads=2 #設置進行Delta Merge 時能夠調用的CPU的處理內核的數量;更多的處理器會加速Delta merge 但過多會導致前端用戶的SQL無響應

 4.2 Delta Merge 相關縮寫

縮寫 意義
 描述
DMS Delta Memory Size[MB] delta內存區域的內存大小
TMD table Merger Delay[sec] 數據表Merge 延遲多少秒后才開始
MRC  Main row count[million] Main內存區域有多少記錄行
DMR Delete Main rows Main內存區域刪除多少上行記錄
DLS   Data Log Size[MB] Delta 內存區域中日志大小
DCC
Delta Cell Count[million]
Delta 內存區域Cell總數
DRC
Delta Row count[million]
Delta 內存區域中有多少行記錄
QDW
Queuing Delay Wait[sec]
 排隊延遲多少秒
NAME
Table name [string]
數據表的名稱
SCHEMA
Schema NAME[string]
Schema 名稱
CLA
CPU load average[percentage]
CPU的平均負載率,如CLA<50,意味豐CPU負載率真小於50%就啟動Merge進程
LCC
 Logical CPU Count
 邏輯CPU胡單元數量
THM
Total Heap Memory[MB]
全部堆棧內存的大小
AHM Available Heap Memory 可用堆棧內存大小,以及能夠釋放胡內存

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.Delta Merge監控

所有的類型的Merger記錄都在M_DELTA_MERGE_STATISTICS中

 

6. Merge 的過程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM