OceanBase
  • 产品
  • 解决方案
  • 客户
  • 合作伙伴
  • 资源与服务
  • 文档
  • 社区
云控制台登录 / 注册
  • 免费试用
本地部署
OceanBase 分布式数据库

首批通过分布式安全可靠测评,为关键业务系统打造

OceanBase 集中式数据库

集中式架构,兼具性能与成本优势的集中式数据库

OceanBase 社区版

兼容 MySQL 的单机分布式一体化开源数据库

OceanBase seekdb

为现代 AI 应用打造的开源混合搜索数据库

云上部署
OB Cloud

一体化云数据库,打造面向多云的一致性体验

一体机
OceanBase 数据库一体机

软硬一体,提供极致性能与高可靠性保障

OceanBase AI 一体机

基于 OceanBase AI Stack 的智能一体机

工具
迁移评估工具(OMA)
数据迁移工具(OMS)
开发者工具(ODC)
运维管理工具(OCP)
自治服务工具(OAS)
一体化关键能力
TP 事务处理

面向关键业务负载的事务处理能力,保障大规模业务稳定运行与数据零丢失

AP 实时分析

原生支持事务与分析融合,低延迟洞察业务数据,驱动智能决策与敏捷运营

AI 现代负载

湖库一体管理多模态数据离在线处理,AI 原生支撑 Agent 规模化应用

oceanbase白皮书

OceanBase 一体化分布式数据库

通用场景
全场景业务系统 OLTP
实时分析混合负载
异地多活
多基础设施部署
一站式传统数据库升级
混合云部署
一库多芯软硬件混合部署
分布式数据库单机部署
大存储类数据库降本
冷数据归档降本
多实例资源整合
分库分表一体化升级
高并发场景
数据中台
行业解决方案
国有大行和股份制银行核心系统解决方案
区域性银行核心系统解决方案
寿险核心系统解决方案
产险核心系统解决方案
资管交易类系统解决方案
资管 TA 清算类系统解决方案
运营商核心系统解决方案
人社核心系统解决方案
电力核心系统解决方案
行业专区
银行专区

助力银行完成各类核心业务系统升级

保险专区

寿险、产险核心系统升级的更佳选择

零售专区

助力200+零售行业客户规模化落地

DB 大咖说
oceanbase爱奇艺

百亿级卡券业务的“单库双擎”架构升级

oceanbase四川银行

800个测试用例选定分布式数据库

oceanbase太平洋保险

先难后易,核心系统数据库升级复盘

行业案例
oceanbase交通银行

核心数据库的“分布式革命”

oceanbase中国移动

B域核心CRM&BOSS近乎零改造分布式升级

oceanbase理想

打造领先的智能制造系统和自动驾驶体验

演讲实录
oceanbase中国联通

集团应用分布式数据库覆盖B/O/M域

oceanbase国泰海通

智能推送系统稳定支撑单日亿级消息处理量

oceanbase中国联合航空

中国首款机票盲盒背后的数据库力量

用户实践
oceanbase北京银行

最快速度完成40余套系统国产数据库升级

oceanbase维沃移动通信有限公司

替换 MySQL 分库分表,探索成本效益最优

oceanbase滴滴

数据库大规模运维体系建设及落地实践

合作伙伴
合作伙伴类型
联合解决方案
产业生态伙伴
经销商伙伴
技术服务伙伴
培训认证伙伴
生态联合解决方案
神州信息 x OceanBase 银行核心系统
长亮科技 x OceanBase 新核心系统
中电金信 x OceanBase 金融分布式核心系统
天阳科技 x OceanBase 贷记卡方案
易诚互动 x OceanBase 手机银行方案
恒生 x OceanBase UF3.0/O45/TA/估值方案
商业发行版
云树®数据库软件 ActionDB
服务
支持与服务
提交工单
软件下载
OceanBase 企业版
OceanBase 社区版
OB Cloud
学习
培训与认证
在线课堂
在线体验
开发者
开发者中心
资料
行业报告与白皮书
官方博客
年度发布会资料
开发者大会资料
oceanbase白皮书

金融核心系统数据库升级路径与场景实践

oceanbase白皮书

人社关键业务数据库一体化升级实践

产品文档
oceanbaseOceanBase 数据库
驱动和中间件
oceanbaseOB Cloud 云数据库
工具与组件
oceanbaseOceanBase 数据库一体机
生态商业产品
快速上手
OceanBase 数据库
OB Cloud 云数据库
知识库
汇聚常见产品使用问题案例
在线体验

Demo与实验,感受 OceanBase 的核心能力与应用场景

OceanBase 最佳实践
了解 OceanBase 分布式数据库的架构与系统原理
技术博客

技术解析 | 用户实践 | 社区月报

在线课堂

电子书 |视频课程|在线培训

Developer Hub
应用开发Demo | 数据开发与集成工具
问答论坛

快速答疑 | 常见问题 | 技术交流

社区活动

Meetup | 技术公开课

GitHub

查看源码 | 贡献代码 | 建议反馈

加入社区

社区组织 | 社区用户贡献 |开发者贡献

进入社区首页
oceanbase数据库大赛

第五届OceanBase数据库大赛

oceanbase免费课程
从故障处理到性能调优:OceanBase资深DBA进阶培训
切换语言
  • 中文站 - 简体中文
  • International - English
  • 日本站 - 日本語
文档反馈
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.4.0
  5. 参考指南
  6. 系统原理
  7. 分布式数据库对象
  8. 日志流和副本
  9. 数据均衡
  10. 租户内均衡
分布式版-V4.4.0
  • What's New
  • 简介
  • 快速上手
  • 应用开发
  • 部署数据库
  • 数据迁移
  • 管理数据库
  • AP
  • 向量搜索
  • 生态集成
  • 实践教程
  • 参考指南
    • 系统原理
      • 数据库整体架构
      • 数据库的发展历程
      • 多租户架构
      • 数据库对象
      • 分布式数据库对象
        • 分布式数据库对象概述
        • 集群架构
        • 日志流和副本
          • 日志流和副本概述
          • 日志流
          • 副本类型
          • 多副本一致性协议
          • 数据均衡
            • 租户内均衡
            • 数据均衡相关的视图和配置项
        • 动态扩容和缩容
      • 数据链路
      • 用户接口和查询语言
      • 事务管理
      • 存储架构
      • 数据可靠性和高可用
      • 数据库安全
      • OBServer 节点架构
    • 系统管理
    • 数据库对象管理
    • 数据库设计规范和约束
    • SQL 参考
    • PL 参考
    • 系统视图
    • 配置项和系统变量
    • 错误码
    • 性能调优
    • 数据库代理
    • 驱动
    • 平台产品
    • 组件 & 工具
    • 数据库插件
  • 常见问题
  • 版本发布记录
  • 术语
  1. 文档中心
  2. OceanBase 数据库
  3. 分布式版
  4. V4.4.0
  5. 参考指南
  6. 系统原理
  7. 分布式数据库对象
  8. 日志流和副本
  9. 数据均衡
  10. 租户内均衡

租户内均衡

更新时间:2025-12-03 18:08:23

github-fill编辑
编组分享

在 OceanBase 数据库 V3.x 版本中,副本以分区为粒度分布在多节点上,负载均衡模块可以通过分区切主、迁移分区副本等方式实现租户内分区均衡。V4.x 版本中升级为单机日志流架构后,副本以日志流为粒度分布,每个日志流上承载着大量分区。因此,在 V4.2.x 版本中,负载均衡模块无法直接控制分区分布,而是需要先对 LS(Log Stream,日志流)的数量和 Leader 进行均衡,然后才能在日志流分布的基础上再进行分区均衡。

注意

分区均衡仅针对用户表。

LS 均衡与分区均衡的优先级顺序如下:

LS 均衡 > 分区均衡

LS 均衡

LS 数量均衡

当用户对租户执行 UNIT_NUM 变更、修改 PRIMARY_ZONE 的第一优先级、修改 Locality(影响 PRIMARY_ZONE)等操作时,负载均衡模块的后台线程会立即通过 LS 分裂、LS 合并、LS Group 变更等动作,变更 LS 的数量和位置,以满足用户修改后的租户状态,即每个租户的 Unit 都有一个日志流组,日志流组内日志流的个数等于 PRIMARY_ZONE 的第一优先级的个数,Leader 在日志流组内均衡地分布在各个 Zone 上。

说明

  • LS Group 是 LS 的属性,LS Group ID 相同的日志流会聚合在一起。
  • 从 V4.0.0 版本开始,OceanBase 数据库要求租户内每个 Zone 的 Unit 个数必须保持一致。为了方便统一管理各个 Zone 的 Unit,系统引入了 Unit Group 机制,即不同 Zone 之间相同编号(UNIT_GROUP_ID)的 Unit 属于同一个 Unit Group。Unit Group 内所有 Unit 上的数据分布相同,具有相同的日志流副本,服务相同的分区数据。从资源容器上,Unit Group 框定了一组数据,这组数据由一个或多个日志流服务,读写服务能力可以扩展到 Unit Group 内的多个 Unit 上。
  • 一个 LS Group 唯一对应一个 Unit Group,也就是相同 LS Group ID 的日志流分布于相同的 Unit Group 内。

LS 数量的计算公式如下:

LS 数量 = UNIT_NUM * first_level_primary_zone_num

说明

此处 LS 数量指的是用户日志流的数量,不包含系统日志流和广播日志流。

LS 数量均衡的场景如下表所示。

触发均衡的场景示例 均衡条件 均衡算法 LS 均衡策略
PRIMARY_ZONE:从 z1, z2 变更为 z1
同时 UNIT_NUM :从 1 变更为 2
LS Group 中有的缺少 LS 和有的有多余 LS,但 LS 的总数量符合终态 迁移冗余 LS 至缺少 LS 的 LS Group 中 LS_BALANCE_BY_MIGRATE
PRIMARY_ZONE: 从 z1 变更为 z1,z2
或者 UNIT_NUM:从 2 变更为 3
仅存在 LS Group 缺少 LS 假设当前 LS 的个数为 M,扩容后 LS 的个数为 N(M < N),则每个缺少的 LS 都需要得到 M/N 个 Tablet LS_BALANCE_BY_EXPAND
PRIMARY_ZONE: 从 z1,z2 变更为 z1
或者 UNIT_NUM:从 3 变更为 2
仅存在 LS Group 有多余 LS 假设当前 LS 的个数为 M,需要缩容到 N 个 LS 上(M > N),则剩下的每个 LS 都需要分到 (M-N)/N 个 Tablet LS_BALANCE_BY_SHRINK

示例 1:如下图所示,PRIMARY_ZONE 的第一优先级从 Z1, Z2 变更为 Z1;同时 UNIT_NUM 需要从 1 变更为 2。变更前后,LS 数量不变,直接将 LS2迁移到新建的 Unit 上,LS2 根据 PRIMARY_ZONE 的变更切主到 Z1,最终完成 LS 均衡。

LS_BALANCE_BY_MIGRATE 示例

示例 2:如下图所示,PRIMARY_ZONE = Z1,UNIT_NUM 从 1 变更为 2,为保证每个 Unit 都有 LS,分裂出 LS2,带走 1/2 的 Tablet,迁移到新的 Unit 上。

LS_BALANCE_BY_EXPAND 示例

示例 3:如下图所示,UNIT_NUM = 1,PRIMARY_ZONE 的第一优先级从 RANDOM 变更为 Z1,Z2。为保证 Leader 仅在 PRIMARY_ZONE 第一优先级的 Zone 上,还需要保证均衡完后,日志流上的 Tablet 的数量均衡。由于 LS3 与其余 LS 在同一个 LS Group 中,可以直接从 LS3 上 Transfer 走 1/2 的 Tablet 到 LS1 上,然后再将 LS3 合并到 LS2 上,让 LS2 承载剩余 1/2 的 Tablet,就可以在减少 LS 数量的同时保持 Tablet 数量均衡。

LS_BALANCE_BY_SHRINK 示例

LS Leader 均衡

LS Leader 均衡是在 LS 数量均衡的前提下,让 LS Leader 平均分布在 Primary Zone 上。例如,用户变更租户的 PRIMARY_ZONE 后,负载均衡后台线程会根据 PRIMARY_ZONE 的第一优先级动态调整 LS 数量,之后再对 LS 进行切主,保证第一优先级的各 Zone 内均有且仅有一个 LS Leader。

例 1:如下图所示,UNIT_NUM = 1,PRIMARY_ZONE 的第一优先级从 Z1 变更为 Z1,Z2,为保证 PRIMARY_ZONE 第一优先级的所有 Zone 上都有 Leader,在同一个 Unit 里分裂出新的 LS,然后再通过 LS Leader 均衡将新 LS 的 Leader 切到 Z2。

Primary Zone 变更示例

例 2:如下图所示,当 UNIT_NUM = 1,PRIMARY_ZONE 的第一优先级从 RANDOM 变更为 Z1,Z2时,经过 LS 数量均衡将 LS3 合并入其他 LS 后,剩余的 LS Leader 天然平均分布在Z1 和 Z2 上,无需额外的 LS Leader 均衡。

LS_BALANCE_BY_SHRINK 示例

建表时分区的分配

当用户创建用户表时,OceanBase 数据库会采用一套均衡分配策略将分区打散或聚合到各个用户日志流上,以保证各个日志流上分区的相对均衡。

指定 Table Group 的用户表

用户可以通过指定 Table Group,灵活配置不同表之间的聚集、打散规则。在创建用户表时,如果指定了对应 Sharding 属性的 Table Group,则新建用户表的分区会按照 Table Group 的规则分配到对应用户的 LS 上。Table Group 的规则如下表所示。

Table Group 的 Sharding 属性 说明 分区方式要求 对齐规则
NONE 所有表的所有分区都聚集在同一台 Server 无限制 所有分区与表组中 table_id 最小的表的分区聚集在同一个 LS
PARTITION 按一级分区打散。如果是二级分区表,则一级分区下的所有二级分区聚集在一起 要求所有表的一级分区的分区方式相同;如果是二级分区表,也只校验一级分区的分区方式。因此,一级分区表和二级分区表可以同时存在,只要他们的一级分区的分区方式相同即可。

相同一级分区 Value 的分区聚集在一起,包括:一级分区表的一级分区和二级分区表的对应一级分区下的所有二级分区。
ADAPTIVE 自适应打散方式。如果 Table Group 内是一级分区表,则按一级分区打散;如果Table Group 内是二级分区表,则按每个一级分区下的二级分区打散。
  • 全部是一级分区表,或者全部是二级分区表。
  • 如果是一级分区表,则要求一级分区的分区方式相同;如果是二级分区表,则要求一级和二级分区方式都相同。
  • 一级分区表:一级分区 Value 相同的分区聚集在一起。
  • 二级分区表:一级分区 Value 相同,并且二级分区 Value 相同的分区聚集在一起。

注意

如果在建表前,Table Group 中已存在用户表,后续新建的表会按 Table Group 中 table_id 最小的用户表对应的分区分布对齐。

有关 Table Group 的更多介绍,请参见 关于表组。

普通用户表

不指定 Table Group 创建普通用户表时,OceanBase 数据库默认将新建分区打散到所有用户 LS 上。具体规则如下。

  • 非分区表:新建分区分配到分区数最少的用户 LS 上。

  • 一级分区表:一级分区表:一级分区按照 Round Robin 算法,平均分布到所有用户 LS 上。

  • 二级分区表:二级分区表:每个一级分区下所有二级分区按照 Round Robin 算法,平均分布到所有用户 LS 上。

下面通过几个示例来进行说明。

  • 示例 1:在 MySQL 模式下分别创建了 tt1、tt2、tt3、tt4 等 4 张非分区表。

    obclient [test]> CREATE TABLE tt1(c1 int);
    
    obclient [test]> CREATE TABLE tt2(c1 int);
    
    obclient [test]> CREATE TABLE tt3(c1 int);
    
    obclient [test]> CREATE TABLE tt4(c1 int);
    

    查询 4 张表的分区分布情况。

    obclient [test]> SELECT table_name,partition_name,subpartition_name,ls_id,zone FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE table_name in('tt1','tt2','tt3','tt4') AND role='LEADER';
    

    查询结果如下。

    +------------+----------------+-------------------+-------+------+
    | table_name | partition_name | subpartition_name | ls_id | zone |
    +------------+----------------+-------------------+-------+------+
    | tt1        | NULL           | NULL              |  1001 | z1   |
    | tt2        | NULL           | NULL              |  1002 | z2   |
    | tt3        | NULL           | NULL              |  1003 | z3   |
    | tt4        | NULL           | NULL              |  1001 | z1   |
    +------------+----------------+-------------------+-------+------+
    4 rows in set
    
  • 示例 2:再创建一个一级分区表 tt5。

    obclient [test]> CREATE TABLE tt5(c1 int) PARTITION BY HASH(c1) PARTITIONS 6;
    

    查看该分区表的分布情况。

    obclient [test]> SELECT table_name,partition_name,subpartition_name,ls_id,zone FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE table_name ='tt5' AND role='LEADER';
    

    查询结果如下。该表的一级分区按照 Round Robin 算法平均分布到了 1001、1002、1003 等日志流上。

    +------------+----------------+-------------------+-------+------+
    | table_name | partition_name | subpartition_name | ls_id | zone |
    +------------+----------------+-------------------+-------+------+
    | tt5        | p0             | NULL              |  1003 | z3   |
    | tt5        | p1             | NULL              |  1001 | z1   |
    | tt5        | p2             | NULL              |  1002 | z2   |
    | tt5        | p3             | NULL              |  1003 | z3   |
    | tt5        | p4             | NULL              |  1001 | z1   |
    | tt5        | p5             | NULL              |  1002 | z2   |
    +------------+----------------+-------------------+-------+------+
    6 rows in set
    
  • 示例 3:创建一个二级分区表 tt8。

    obclient [test]> CREATE TABLE tt8 (c1 int, c2 int, PRIMARY KEY(c1, c2)) 
        PARTITION BY HASH(c1) SUBPARTITION BY RANGE(c2) SUBPARTITION TEMPLATE 
        (SUBPARTITION p0 VALUES LESS THAN (1990), 
         SUBPARTITION p1 VALUES LESS THAN (2000),
         SUBPARTITION p2 VALUES LESS THAN (3000),
         SUBPARTITION p3 VALUES LESS THAN (4000),
         SUBPARTITION p4 VALUES LESS THAN (5000),
         SUBPARTITION p5 VALUES LESS THAN (MAXVALUE)) 
         PARTITIONS 2;
    

    查看表 tt8 的分区分布情况。

    obclient [test]> SELECT table_name,partition_name,subpartition_name,ls_id,zone FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE table_name ='tt8' AND role='LEADER';
    

    查询结果如下。该表下一级分区的所有二级分区按照 Round Robin 算法,平均分布到了用户的所有 LS 上。

    +------------+----------------+-------------------+-------+------+
    | table_name | partition_name | subpartition_name | ls_id | zone |
    +------------+----------------+-------------------+-------+------+
    | tt8        | p0             | p0sp0             |  1001 | z1   |
    | tt8        | p0             | p0sp1             |  1002 | z2   |
    | tt8        | p0             | p0sp2             |  1003 | z3   |
    | tt8        | p0             | p0sp3             |  1001 | z1   |
    | tt8        | p0             | p0sp4             |  1002 | z2   |
    | tt8        | p0             | p0sp5             |  1003 | z3   |
    | tt8        | p1             | p1sp0             |  1002 | z2   |
    | tt8        | p1             | p1sp1             |  1003 | z3   |
    | tt8        | p1             | p1sp2             |  1001 | z1   |
    | tt8        | p1             | p1sp3             |  1002 | z2   |
    | tt8        | p1             | p1sp4             |  1003 | z3   |
    | tt8        | p1             | p1sp5             |  1001 | z1   |
    +------------+----------------+-------------------+-------+------+
    12 rows in set
    

特殊用户表

除了普通用户表外,有局部索引表、全局索引表、复制表这些特殊用户表,具有特别的分配规则。具体如下:

  • 局部索引表:与用户表主表的分区规则相同,每个分区与主表的分区分布绑定在一起。

  • 全局索引表:默认为非分区表,建表时分布到分区数量最少的用户 LS 上。

  • 复制表:复制表仅存在于广播日志流上。

分区均衡

在 LS 均衡的基础上,负载均衡模块会通过 Transfer,将分区 Tablet 打散或聚合在不同的 LS 上,达到租户下的分区均衡。分区均衡时间间隔通过租户级配置项 partition_balance_schedule_interval 控制,默认 2h 执行一次,每次执行仅运行一种分区均衡策略。如果配置项 partition_balance_schedule_interval 的值设置为 0s,则表示不进行分区均衡。

分区均衡策略的优先级顺序如下:

分区属性对齐 > 分区数量均衡 > 分区磁盘均衡

分区属性对齐

Table Group 对齐

当用户通过 SQL 语句修改表的 Table Group 属性或 Table Group 的 Sharding 属性时,需要等待后台的分区均衡任务执行完成,才能达到符合预期的分区分布。可以临时调小租户级配置项 partition_balance_schedule_interval 的值以便快速对齐。

Table Group 中表的分区分布规则请参见本文 指定 Table Group 的用户表 中的内容。

有关 Table Group 的更多介绍,请参见 关于表组。

duplicate_scope 对齐

在 OceanBase 数据库 V4.3.5 版本中,从 V4.3.5 BP1 版本开始支持复制表属性的变更。复制表只能存在于广播日志流上。当用户修改 duplicate_scope 属性后,需要等待分区均衡执行完成后才能按照预期属性使用。可以临时调小租户级配置项 partition_balance_schedule_interval 的值以便快速对齐。

有关复制表属性变更的详细操作,参见 更改复制表属性(MySQL 模式) 和 更改复制表属性(Oracle 模式)。

分区数量均衡

分区数量均衡的目标是让所有用户的 LS 上的用户表主表分区数量均匀(数量偏差不大于 1)。

实现上,OceanBase 数据库采用 “均衡组” 的概念描述打散关系,将需要打散分布的分区划分到同一个均衡组内,通过组内均衡和组间均衡的方式实现分区数量均衡。

无 Table Group 的场景下,均衡组的划分方式如下:

表类型 均衡组划分 分布方式(无 Table Group)
非分区表 租户下所有非分区表是一个均衡组。 租户下所有非分区表,平均分布到用户的所有 LS 上(数量偏差不大于 1)。
一级分区表 每张表下所有一级分区是一个均衡组。 以每张表为单位,一级分区平均分布到用户的所有 LS 上。
二级分区表 单张表的每个一级分区下的所有二级分区是一个均衡组。 单张表每个一级分区下的所有二级分区,平均分布到用户的所有 LS 上。

均衡阶段,系统先对所有均衡组进行组内均衡,即组内分区平均分布,然后再在组内均衡的基础上,从分区数最多的 LS 上 Transfer 走一部分分区,进行组间均衡,从而实现分区数量均衡。

例如,现有 4 张表的所有分区均在 LS1 上,分为 3 个均衡组:

  • 均衡组 1:非分区表 non_part_t1、non_part_t2

  • 均衡组 2:一级分区表的 2 个分区 part_one_t3_p0、part_one_t3_p1

  • 均衡组 3:二级分区表的 4 个分区 part_two_t4_p0s0、part_two_t4_p0s1、part_two_t4_p1s0、part_two_t4_p1s1

初始分布,各分区分布为 8-0-0。

初始分布

组内均衡后,各分区分布为 4-4-0,各均衡组已达到均衡,但总体未均衡。

组内均衡后分布

组间均衡后,分区分布为 3-3-2 ,从分区最多的 LS1 、LS2 上各 Transfer 走一个分区到分区数最少的 LS3 上,总体达到均衡。

组间均衡后分布

当存在 Table Group 时,每个 Table Group 是一个独立均衡组,系统会将 Table Group 要求聚集的分区进行绑定,视为一个分区。然后采用同样的组内均衡、组间均衡方式进行分区数量均衡。存在 Table Group 时,租户下所有分区数量可能无法达到完全平均。

存在 Table Group 的场景下,均衡组的划分方式如下:

表类型 均衡组划分 分布方式
Table Group 的 Sharding 属性为 NONE 的表 自成一个均衡组 Table Group 下所有分区都分布在一个日志流上
Table Group 的 Sharding 属性为 PARTITION 或 ADAPTIVE 的一级分区表 所有表的一级分区是一个均衡组 第一张表平均分区到所有的日志流上,后面的表的位置均与第一张表聚集
Table Group 的 Sharding 属性为 ADAPTIVE 的二级分区表 所有表一级分区下的所有二级分区是一个均衡组 第一张表每个一级分区下的所有二级分区平均打散在所有日志流上,后面的表的位置均与第一张表聚集

例如,在上面均衡后的基础上,再新增一个 sharding = 'NONE' 的 Table Group tg1,其中包含 non_part_t5_in_tg1、non_part_t6_in_tg1、non_part_t7_in_tg1、non_part_t8_in_tg1、non_part_t9_in_tg1等五个非分区表。由于 tg1 中的所有表必须绑定到一起,均衡后表的分区分布为 4-4-5。

含 Table Group 的分布

分区磁盘均衡

在分区数量均衡的基础上,负载均衡模块通过尽可能地交换分区,实现各个日志流之间的磁盘占用差值不超过集群级配置项 balancer_tolerance_percentage 所设置的百分比。如果单分区磁盘占用过大,可能会达不到该均衡效果。

为避免小数据量场景均衡过于频繁的问题,当前版本分区磁盘均衡触发的阈值为 "50GB",若单个 LS 磁盘占用小于该阈值,则不会触发磁盘均衡。

分区均衡的判断方法

分区均衡是用户表主表的均衡,查询时需要指定 table_type='USER TABLE'。分区磁盘均衡主要通过视图 CDB_OB_TABLET_REPLICAS 中的 data_size 字段来判断。

  • 分区数量均衡的查询方法

    obclient [test]> SELECT svr_ip,svr_port,ls_id,count(*) FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE tenant_id=xxx AND role='leader' AND table_type='USER TABLE' GROUP BY svr_ip,svr_port,ls_id;
    
  • 分区磁盘均衡的查询方法

    obclient [test]> SELECT a.svr_ip,a.svr_port,b.ls_id,sum(data_size)/1024/1024/1024 as total_data_size FROM oceanbase.CDB_OB_TABLET_REPLICAS a, oceanbase.CDB_OB_TABLE_LOCATIONS b WHERE a.tenant_id=b.tenant_id AND a.svr_ip=b.svr_ip AND a.svr_port=b.svr_port AND a.tablet_id=b.tablet_id AND b.role='leader' AND b.table_type='USER TABLE' AND a.tenant_id=xxxx GROUP BY svr_ip,svr_port,ls_id;
    

本文目录

LS 均衡LS 数量均衡LS Leader 均衡建表时分区的分配指定 Table Group 的用户表普通用户表特殊用户表分区均衡分区属性对齐分区数量均衡分区磁盘均衡分区均衡的判断方法
有帮助
无帮助
反馈
AI

OceanBase

OceanBase 海扬数据库始创于 2010 年,是完全自主研发的数据库公司。2020年开始独立商业化运作,历经15年大规模核心场景验证,目前是中国数据库的领军企业之一。从分布式数据库到 AI 数据库,为企业提供安全、稳定、可扩展的数据底座,推动数据基础设施全面拥抱 AI 时代。

关于我们

关于 OceanBase最新动态资质荣誉客户专家委员会招贤纳士合作伙伴年度发布会开发者大会

资源与服务

支持与服务文档知识库软件与工具下载培训与认证在线体验数据库专题视频

社区

快速上手开发者中心博客活动学习问答GitHub

数据库百科

分布式数据库国产数据库OLTP 数据库OLAP 数据库HTAP 数据库数据库向量数据库向量检索

联系我们

服务热线:
400-109-0633
商务咨询
培训认证技术支持媒体合作
京公网安备11010802047223号京公网安备11010802047223号
京ICP备20024574号-1
合字B1.B2-20250395
网站服务协议隐私协议安全响应协议
OceanBase 版权所有 © 2026 基础资源和备案服务由阿里云提供