基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
OceanBase 数据库 V4.x 版本中负载均衡在进行磁盘均衡时的逻辑
更新时间:2026-06-16 09:21
OceanBase 数据库 V4.x 版本中的负载均衡问题是目前遇到的比较多的问题,尤其是磁盘均衡的问题比较突出,本文主要对磁盘均衡的的调度逻辑和最终结果做一个说明。
详细说明
OceanBase 数据库在进行完分区数量的均衡后,会尝试进行磁盘均衡,均衡的逻辑如下:
OceanBase 数据库会获取当前租户下所有日志流,取空间占用最大的日志流和空间占用最小的日志流。
如果磁盘空间占用最大的日志流和占用最小的日志流差值比例大于
balancer_tolerance_percentage,则需要进行分区磁盘均衡。如果
balancer_tolerance_percentage满足,OceanBase 数据库会获取最大日志流里空间最大的分区组(分区组里有多个分区)与最小日志流里空间最小的分区组,对这两个分区组的空间是否满足一定大小进行判断(按梯度比较:10GB、5GB、1GB、500MB、200MB、100MB)。计算并判断交换两个分区组后,能否使两个日志流磁盘空间占用的差值减小。
如果满足上述条件,则对这两个日志流的两个分区组进行交换,生成均衡任务,关键日志如下。
observer.log.20250326091434723:[2025-03-26 09:08:48.682291] INFO [BALANCE] process_balance_partition_disk_ (ob_partition_balance.cpp:590) [65748][T1002_TBalance][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=33] [PART_BALANCE] disk_balance(ls_max={ls_id:{id:2790}, partgroup_cnt:60, data_size:820783215086}, ls_min={ls_id:{id:1148}, partgroup_cnt:61, data_size:336504819793}) observer.log.20250326091434723:[2025-03-26 09:08:48.683650] INFO [BALANCE] process (ob_partition_balance.cpp:139) [65748][T1002_TBalance][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=38] PART_BALANCE process(ret=0, ret="OB_SUCCESS", tenant_id_=1002, task_mode_=1, cost=1415589, task_cnt=0)
由如上的逻辑可知,OceanBase 数据库并无法完全保证实现磁盘的均衡,当出现单表比较大或者分区数与日志流数不能整除的场景会存在无法均衡的情况,部分节点磁盘会比其他节点大,如果遇到此类情况,可以尝试手动在各个日志流之间进行分区的 transfer。
适用版本
OceanBase 数据库 V4.x 版本。