OB的内存&转储&合并
OB的内存&转储&合并
内存
OBserver内存:
物理总内存=OBserver内存+OS剩余内存。OBserver的内存分为两部分,一部分是system内存,一部分是租户内存。
通过参数设定observer占用的内存上限:
memory_limit_percentage=80 --->80%物理内存为observer的总内存。
memory_limit='40G' --->observer的总内存40G。
其中memory_limit优先级大于memory_limit_percentage
system内存
这块内存是所有租户共享的,系统内存。通过system_memory 参数设置system内存,3.X默认分配30G。
租户内存
租户内存是每个租户独占的, 各个租户之间不相互影响。
每一个租户的内存分两部分:MemStore+可动态伸缩的内存。
MemStore内存是用来缓存DML增量数据的,内存不可被挤占。大小由参数memstore_limit_percentage决定,表示租户的MemStore 部分占租户总内存的百分比。 默认值为50,即占用租户内存的50%。 当MemStore内存使用超过freeze_trigger_percentage定义的百分比时(默认70%),触发冻结及后续的转储/合并等行为
可动态伸缩的内存:KV cache、Plan cache、SQL Area、Other Area。其中KVcache保存来自SSTable的热数据,提高查询速度。大小可动态伸缩,会被其它各种Cache挤占
转储
1、转储是将租户内的memtable持计划到磁盘的动作。
2、memtable持久化到min SStable时,只有内存数据顺序写落盘,不会和磁盘上的SStable做数据合并,只会和上一次转储的Mini SStable进行数据合并。
3、转储是单个租户的内存数据持久化动作,不是全局动作,可以进行控制,指定。
转储触发条件
自动触发:
当memtore使用量达到阈值时,数据库会自动进行转储。由参数memstore_limit_percentage*freeze_trigger_percentage控制
手动触发:
ALTER SYSTEM MINOR FREEZE [zone] | [server_list] | [tenant_list] | [replica]。可以控制转储粒度,最细到某一个租户下的某一个分区。
合并
1、将所有的memtable和SStable进行数据一致性合并,去除冗余数据。
2、合并是整个zone级别的动作,若集群很繁忙,对集群影响很大,建议放到业务低峰期执行。
合并触发方式:
自动定时触发 :alter system set major_freeze_duty_time='02:00'; 默认每天凌晨2点执行全库合并
阈值触发:当租户的 MemStore内存使用率达到freeze_trigger_percentage参数的值, 并且转储的次数已经达到了minor_freeze_times参数的值
手动触发:"root@sys"用户下执行alter system major freeze;
合并策略
手动定义合并:纯手动开启合并,并定义zone的合并顺序,并发度。
自动非轮转合并:所有zone同时合并,没有并发控制。
制定轮转顺序合并:用户设置zone的轮转顺序。RS自动调度并发度
智能轮转合并:RS自动控制zone轮转顺序,自动控制并发度。
合并注意事项
合并超时时间:数zone_merge_timeout 默认3h。如果某个ZONE的合并执行超过阈值,合并状态被设置为TIMEOUT。
磁盘空间使用率:超过如下限制后,合并会报错并打印ERROR日志。
超过data_disk_usage_limit_percentage(默认90%)后,禁止数据写入
datafile_disk_percentage占用data_dir所在磁盘总空间百分比4.0要以前默认90。4.0以后默认是0,当为0时,会自动判断数据文件和日志文件是否在同一个文件系统里。当在同一个文件系统里时,数据文件最大占文件系统的60%,独占文件系统则占90%。
datafile_size 数据文件可以使用的文件系统存储的绝对值,默认是0。例如datafile_size=40960,表示数据文件最多只能扩展到40G。若datafile_size跟datafile_disk_percentage同时设置了,则以datafile_size为准。