适用版本:V2.1.x、V2.2.x、V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x
从 OceanBase 数据库 V2.1 版本开始,对内存使用做了按租户拆分,目前大部分内存模块已经拆分到各个租户下面,这样便于计算每个分区的内存开销,同时也可实现根据租户内存计算理论分区数上限,避免无限制创建分区导致租户内存爆掉。
如何计算分区数上限
首先,我们需要计算出租户可用内存上限,计算方式如下:
接下来,可以利用上面的租户可用内存来计算理论分区数上限值:
没有使用 Partition Group 的版本(V2.2 之前的版本不支持 Partition Group),设租户当前分区总数为 num,根据如下计算公式进行评估:
所需总内存 = 128K * num + max(1000, num/10) * 400K
需要确保算出来的值不能超过租户可用内存上限,否则需调大租户内存规格。 此外,还需要确保:
OceanBase 数据 V2.2 及之后的版本,如果使用了 Partition Group 功能,由于一个 Partition Group 中可能包含很多 partition,其内存开销要比普通的单个分区大,我们按每个 Partition Group 预留 (528KB+1MB)内存来计算,根据系统已有的 Partition Group 数量计算需要为 Partition Group 预留的内存。
OceanBase 数据库 V3.x 和 V4.x 版本的最大限制
| 类型 | OceanBase 数据库 V3.x 版本最大限制 | OceanBase 数据库 V4.x 版本最大限制 |
|---|---|---|
| OceanBase 数据库 的分区副本数 | 建议值为 5w;说明: OceanBase 数据库 分区总数受隐藏参数 _max_partition_cnt_per_server,V2.2.77 版本默认值为 10w;V3.2.3 版本默认值为 50w; 但是超过 5w 会存在稳定性问题,后续需要对所有部署的集群做这个配置的修改。SYS 租户大概需要使用 4000 分区,所以用户可用的所有租户最大为46000。 | 无严格限制,详细内容参见:使用限制 不再有 _max_partition_cnt_per_server配置,主要取决于租户的资源,每个 OceanBase 数据库节点的分区副本数可根据租户内存大小来预估,1G 内存约支持约 2 万 tablet。 |
| 租户分区数 | 租户的分区总数限制是根据租户的资源来计算的,计算公式如下: partition_num = (max_memory - memstore_limit) partition_mem + max_memory:租户最大内存 + memstore_limit:MEMStore 内存 + partition_mem:每个分区占用的内存(系统按这个大小来估算分区总数并加以限制) partition_mem 的计算公式 - 不使用 PG:partition_mem = 128K(static) +1/10 * 400K(dynamic) =168K,假定 1/10 的分区处于 active 状态 - 使用 PG:partition_mem = 128K(static) + 1/10 * (400+1024) K = 270K,按照 512K 来估算 PG 中的 partition 如果 memstore_limit_percentage 配置的是 50%,假设没有使用 PG; partition_num = (0.5 * 租户内存) / (128K + 400K * 1/n) 假设租户内存 32G,n = 10; 最大分区数为10w个。远大于节点的 5w 个建议。 所以,内存 >16G, 一般可以不用考虑租户的分区限制,瓶颈在集群上。 | 每个 OceanBase 数据库节点的分区副本数可根据租户内存大小来预估,1G 内存约支持约 2 万 tablet (内存的计算需要扣除 meta 租户,2 万 tablet 受变量 _max_tablet_cnt_per_gb控制) 租户内存为 4G 时,可以简单计算: 租户最大分区 = (租户内存数 - 1G) * 2w |
| 单表分区个数限制 | MySQL 模式:8192 个 | MySQL 模式:8192 个 |
文章转载自数据库工兵营,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




租户内存为 4G 时,可以简单计算: 租户最大分区 = (租户内存数 - 1G) * 2w