合并的触发条件分为自动触发和手动运行合并命令。
自动触发
自动触发的条件是,触发了冻结条件。同时转储次数达到了 minor_freeze_times
的情况下再次发生了 MemTable 的内存使用达到阈值 freeze_trigger_percentage
,此时不会触发转储而是直接触发合并。
冻结触发是指:
- 当一个租户的 Active MemStore 大小超过阈值时触发,阈值
freeze_trigger_percentage
。 - 当所有租户的 Active MemStore 大小超过阈值时触发,阈值
enable_global_freeze_trigger
。
另外的自动触发条件是每天定时的合并任务,默认凌晨 2 点进行合并,参数可以通过 major_freeze_duty_time
来设定,默认是 02:00。
手动触发
手动触发的方式是集群级别的合并命令,具体参考下节 合并操作命令。
合并操作命令
发起每日合并的语句如下所示:
ALTER SYSTEM MAJOR FREEZE [IGNORE 'ip:port' [,'ip:port'…]]
打开手动合并的语句如下所示:
ALTER SYSTEM SET ENABLE_MANUAL_MERGE='True'
关闭手动合并的语句如下所示:
ALTER SYSTEM SET ENABLE_MANUAL_MERGE='False'
开始每日合并的语句如下所示:
ALTER SYSTEM START MERGE ZONE [=] 'zone'
暂停每日合并的语句如下所示:
ALTER SYSTEM SUSPEND MERGE [ZONE [=] 'zone']
恢复每日合并的语句如下所示:
ALTER SYSTEM RESUME MERGE [ZONE [=] 'zone']
合并控制参数
配置项 | 含义 | 默认值 | 取值范围 |
major_freeze_duty_time | 每天定时合并的时间。 | 02:00 | [00:00,24:00] |
major_compact_trigger | 等同于 | 5 | [0,65535] |
merge_stat_sampling_ratio | 合并时统计信息采样率,当设置为 0 时则关闭统计信息采集。 | 100 | [0,100] |
merge_thread_count | 每日合并线程数。 | 0 | [0, 64] |
enable_merge_by_turn | 是否开启轮转合并。 | true |
|
zone_merge_order | 轮转合并开启时 Zone 的合并顺序。 | Null | Null |
zone_merge_concurrency | 并发合并的 Zone 的数量。 | 0 | [0,+∞] |
default_progressive_merge_num | 租户建表时的默认累计合并数量。 | 0 | [0, +∞) 其中:
|
enable_manual_merge | 是否开启手动合并。 | false |
|
max_kept_major_version_number | 存储保留最大合并版本数量。 | 2 | [1, 16] |
zone_merge_timeout | Zone 合并的超时时间。 | 3h | [1s, +∞) |
merger_check_interval | 每个 Zone 的合并进度检查间隔。 | 10m | [10s, 60m] |
merger_completion_percentage | 合并好的分区数或数据大小比例。 | 100 | [5, 100] |
enable_global_freeze_trigger | 所有租户的 MemStore 使用率高是否触发合并。 | false |
|
说明:
enable_manual_merge
参数开启后,表示需要手动对集群的 Zone 逐个进行合并。