基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
租户 primary_zone 修改后,可能会触发分区迁移操作
更新时间:2026-07-02 15:41
在租户 unit_num 大于 1,并且租户 primary_zone 从一个到多个,或者多个到多个的情况下,不仅会触发切主操作,还会触发分区均衡操作。
详细说明
在租户的分区已经均衡的情况下,并且 Leader 也均衡的情况下,调整租户的 primary_zone,直观上只进行 Leader 均衡即可,但是在分区均衡算法的表现会比较复杂。
分区均衡算法
分区均衡算法包括二部分:分区均衡(分区 Leader 的位置是否符合预期),磁盘均衡。
分区均衡
分区均衡先在均衡组内把分区个数均衡了,但是 Leader 位置的均衡比较麻烦,它相当于通过一个算法,把某个分区的 Leader 和某个 Zone 绑定了,如果不能将这个分区的 Leader 切到这个 Zone,就需要通过迁移完成。
具体 Leader 和 Zone 绑定的算法比较复杂,可以展示在 __all_virtual_rebalance_map_item_stat 的 designated_role。 所以即使是分区均衡或者 Leader 个数也均衡的情况下,也是可能不满足分区均衡的条件的,因为 Leader 均衡是将分区 Leader 和某个 Zone 绑定在一起的,这个可能会出现迁移操作。
磁盘均衡
磁盘均衡需要在个数均衡的基础上进行,受配置项 balancer_tolerance_percentage 控制,这个均衡是通过交换分区得到的。
对于两个分区 A 和 B,满足以下条件才能交换。
基本条件:
A.dest_unit_id_ != B.dest_unit_id_(目标单元不同) A.is_designated_leader() == B.is_designated_leader()(Leader 角色相同) A.get_replica_type() == B.get_replica_type()(副本类型相同) A.get_memstore_percent() == B.get_memstore_percent()(内存比例相同)不是 LOGONLY 或 ENCRYPTION_LOGONLY 类型
磁盘条件:
A.data_size > B.data_size(A 比 B 大)交换后高负载单元仍大于平均值;交换后低负载单元小于平均值 + 阈值。
适用版本
OceanBase 数据库 V4.x 之前的所有版本。