[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 的过程
每天进步一点点,多思考,多总结
版权声明:本文为CNblog博主「zaituzhong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。