[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 的过程

 

posted on 2020-03-30 17:26  InnoLeo  阅读(2065)  评论(0编辑  收藏  举报