合并的触发条件分为自动触发和手动运行合并命令。

自动触发

自动触发的条件是,触发了冻结条件。同时转储次数达到了 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。

手动触发

手动触发的方式是集群级别的合并命令,具体参考下节 合并操作命令

合并操作命令

发起每日合并的语句如下所示:

  1. ALTER SYSTEM MAJOR FREEZE [IGNORE 'ip:port' [,'ip:port'…]]

打开手动合并的语句如下所示:

  1. ALTER SYSTEM SET ENABLE_MANUAL_MERGE='True'

关闭手动合并的语句如下所示:

  1. ALTER SYSTEM SET ENABLE_MANUAL_MERGE='False'

开始每日合并的语句如下所示:

  1. ALTER SYSTEM START MERGE ZONE [=] 'zone'

暂停每日合并的语句如下所示:

  1. ALTER SYSTEM SUSPEND MERGE [ZONE [=] 'zone']

恢复每日合并的语句如下所示:

  1. ALTER SYSTEM RESUME MERGE [ZONE [=] 'zone']

合并控制参数

配置项

含义

默认值

取值范围

major_freeze_duty_time

每天定时合并的时间。

02:00

[00:00,24:00]

major_compact_trigger

等同于 minor_freeze_times 。

5

[0,65535]

merge_stat_sampling_ratio

合并时统计信息采样率,当设置为 0 时则关闭统计信息采集。

100

[0,100]

merge_thread_count

每日合并线程数。

0

[0, 64]

enable_merge_by_turn

是否开启轮转合并。

true

  • true:开启
  • false:不开启

zone_merge_order

轮转合并开启时 Zone 的合并顺序。

Null

Null

zone_merge_concurrency

并发合并的 Zone 的数量。

0

[0,+∞]

default_progressive_merge_num

租户建表时的默认累计合并数量

0

[0, +∞) 

其中:

  • 取值为 0 时,表示每次合并均做增量合并
  • 取值为 1 时,表示每次合并均做全量合并
  • 取值大于 1 时,表示发生 schema 变更时按照指定轮次做渐进合并

enable_manual_merge

是否开启手动合并。

false

  • true:开启
  • 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

  • true:是
  • false:否

说明

enable_manual_merge 参数开启后,表示需要手动对集群的 Zone 逐个进行合并。