跳到主要内容
版本:Nightly

Auto Repartition

Auto Repartition 是 Autopilot 的一个调度策略,用于自动将大 Region 拆分为多个小 Region。当某个表中存在可能成为性能瓶颈的大 Region 时,Auto Repartition 会基于采样结果生成新的分区边界,并提交 Repartition 操作。

拆分后的 Region 可以被调度到不同 Datanode 上,从而打散潜在的负载瓶颈。Auto Repartition 可以减少手动发现大 Region 和手动执行重分区的运维成本。关于手动重分区的说明,请参考重分区

前置条件

警告

Auto Repartition 依赖 GreptimeDB 的重分区能力,仅支持分布式集群,并且需要:

否则无法执行重分区。

对象存储用于保存 Region 文件,GC 负责在引用释放后再回收旧文件,避免重分区过程中误删仍在使用的数据。

什么时候使用 Auto Repartition

Auto Repartition 适合以下场景:

  • 某些大 Region 可能成为性能瓶颈;
  • 表的原有分区规则已经不能匹配当前数据分布;
  • 希望将大 Region 拆分为多个小 Region,并通过后续调度打散潜在的负载瓶颈;
  • 希望减少手动分析大 Region 和手动执行 Repartition 的运维成本。

未分区表的 Auto Repartition

当指定了重分区列 hint 时,Auto Repartition 也可以作用于未分区表。对于未分区表,GreptimeDB Enterprise 不会自动推断分区列。你可以在创建表时指定后续 Auto Repartition 使用的候选列:

CREATE TABLE sensor_readings (
host STRING,
cpu DOUBLE,
ts TIMESTAMP TIME INDEX,
PRIMARY KEY(host)
)
WITH ('repartition.column.hint'='host');

你也可以后续通过 ALTER TABLE 设置或更新该 hint:

ALTER TABLE sensor_readings SET 'repartition.column.hint'='host';

取消该 hint:

ALTER TABLE sensor_readings UNSET 'repartition.column.hint';

该 hint 只会记录供后续 Auto Repartition 使用的元信息,不会立即触发重分区。当表满足 Auto Repartition 的触发条件后,GreptimeDB Enterprise 可以使用该 hint 指定的列生成分区边界,并提交 Repartition 操作。

重分区列 hint 有以下限制:

  • 只能指定一个列。
  • 指定的列必须存在于表中。
  • 指定的列不能是 time index 列。
  • 只能在没有 partition metadata 的表上设置。
  • 使用 ALTER TABLE 时,必须单独设置或取消,不能和其他 table options 一起修改。

限制

Auto Repartition 支持已分区表,以及设置了 repartition.column.hint 的未分区表。对于未分区表,GreptimeDB Enterprise 不会自动推断分区列。

关于表分区和重分区的说明,请参考表分片重分区

配置

Auto Repartition 依赖 Autopilot 运行时和集群统计信息。下面的示例同时包含共享配置和 Auto Repartition 配置:

[[plugins]]
[plugins.autopilot]
tick_interval = "45s"

[[plugins]]
[plugins.cluster_stat]
sampling_window = "45s"
max_history_windows = 5
ewma_alpha = 0.2

[[plugins]]
[plugins.auto_repartition]
split_trigger_ratio = 1.8
max_split_parts = 3
table_repartition_cooldown_period = "60s"
max_actions_per_tick = 4
max_actions_per_table_per_tick = 2

其中:

  • plugins.autopilot 控制 Autopilot 的调度周期;
  • plugins.cluster_stat 控制 Datanode 和 Region 写入统计信息的采样与平滑;
  • plugins.auto_repartition 控制大 Region 拆分的触发条件、拆分规模和提交数量。

共享配置项的详细说明请参考 Autopilot 配置

核心配置项

配置项默认值说明
split_trigger_ratio1.8Region 写负载达到目标单 Region 写负载多少倍后,才会考虑拆分。例如默认值 1.8 表示当某个 Region 的写负载达到目标值的 1.8 倍以上时,才会进入拆分规划。
max_split_parts3单个 Region 最多拆分成多少个子 Region。
table_repartition_cooldown_period"60s"表级重分区冷却时间。一次重分区请求提交成功后,同一张表在冷却时间内不会再次提交重分区请求。
max_actions_per_tick4每个调度周期最多提交的重分区动作数。
max_actions_per_table_per_tick2每张表在每个调度周期内最多提交的重分区动作数。

高级配置项

以下配置通常不需要调整,建议仅在明确了解表的数据分布和拆分点选择行为后修改。

配置项默认值说明
sampling_budget"10MB"为单个 Region 计算拆分点时最多采样的数据量。较大的采样量可能提升拆分点质量,但也会增加规划成本。
split_segment_min_ratio0.7校验拆分建议时,允许的最小分段大小比例。
split_segment_max_ratio1.3校验拆分建议时,允许的最大分段大小比例。
min_samples3判断 Region 写入稳定性所需的最少历史样本数。
max_region_history_cv0.2Region 写入历史的最大变异系数。超过该值的 Region 会被视为写入不稳定。