yugabytedb 的 tablet 分裂与自动负载均衡由多个参数协同控制,核心是避免单 tablet 过大或过热,同时防止过度分裂;分裂基于大小阈值(如 ysql_tablet_split_limit 默认1gb)触发,需满足启用状态、节点可用等前提,分裂后由 load balancer 周期性均衡副本分布。

YugabyteDB 的 tablet splitting(分片分裂)和自动负载均衡由多个配置参数协同控制,核心目标是避免单个 tablet 过大或过热,同时防止过度分裂导致管理开销上升。自动分裂与均衡不是完全独立的两个过程——tablet 分裂后会触发重新均衡,而均衡器(Load Balancer)也会根据 tablet 分布、读写热度等动态调整副本位置。
1. 控制自动分裂的关键阈值
YugabyteDB 默认启用基于大小的自动 tablet 分裂(需开启 enable_automatic_tablet_splitting),主要依赖以下参数:
- ysql_tablet_split_limit(YSQL)或 yccql_tablet_split_limit(YCQL):单个 tablet 的最大数据量(单位:字节)。默认值通常为 1073741824(即 1GB)。超过该值且满足其他条件时,系统将尝试分裂该 tablet。
- tablet_split_low_phase_threshold:分裂的“低相位”阈值,用于控制是否进入预分裂准备阶段(如采样、键范围评估)。一般无需手动调整,但影响分裂时机的保守性。
-
tablet_split_max_size:实际执行分裂时参考的软上限(部分版本中与
xxx_tablet_split_limit行为重叠),建议保持与前者一致。
2. 触发分裂的前提条件不止大小
仅数据量超限不足以触发分裂,还需满足:
- 表已启用自动分裂(
CREATE TABLE ... SPLIT INTO N TABLETS或建表后通过ALTER TABLE ... SET (split_limit = ...)显式设置;YB 2.15+ 支持运行时开关) - 当前 tablet 的主副本所在节点未处于维护/下线状态
- 集群有足够空闲节点可用于新 tablet 副本的放置(受
num_replicas和可用节点数约束) - 分裂操作未被全局禁用(
--enable_automatic_tablet_splitting=false启动参数优先级最高)
3. 自动均衡器如何响应分裂后的分布
分裂产生新 tablet 后,YB 的 Master Load Balancer 会在后台周期性(默认每 30 秒)检查并触发副本迁移,确保:
- 各节点上 tablet 副本总数相对均衡(以
--load_balancer_max_moves_per_round限制单轮迁移数量) - 同一 tablet 的多个副本不集中在同一机架/zone(依赖 placement block 配置)
- 热点 tablet(高 QPS 或高延迟)可能被优先迁移或触发 read replica 调度(需开启
--enable_ycql_read_replica_load_balancing等)
注意:均衡器不直接控制分裂,但分裂是均衡的前提——只有 tablet 数量增加,才可能缓解单点压力。
4. 推荐配置与调优建议
- 生产环境建议将
ysql_tablet_split_limit设为 512MB–2GB,具体取决于单表写入吞吐与查询模式;高频小事务可偏小,宽列/大 BLOB 场景可适当调大 - 通过
yb-admin list_tablets或http://<master-ip>:7000/tablet-servers</master-ip>页面观察各 tablet 大小与分布,验证分裂效果 - 若发现分裂频繁但均衡滞后,可适度调大
--load_balancer_max_moves_per_round(默认 10)和缩短--load_balancer_idle_wait_ms(默认 30000) - 禁用自动分裂后,仍可通过
yb-admin split_tablet手动分裂,适用于压测或灰度场景










