首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库为何对分区数有限制
更新时间:2024-01-17 09:56
OceanBase 数据库中,出于对性能的考虑对于分区数有一些建议。本文介绍分区数的建议以及计算方法。
对于 OceanBase V1.4.X 和 OceanBase V2.2.X 版本,建议单个节点的分区数目不超过 5 万,如果超过了这个数目,则建议对 OceanBase 集群进行扩容。对于单节点上分区数目限制的建议,主要是因为当一台物理机上的分区过多,会对系统造成以下影响。
CLOG 主备 keep alive 的 RPC 开销增大。
后台遍历分区的定时任务的开销增大。
每个分区会占用系统内存,降低 OceanBase 集群性能。
容灾场景下,系统恢复时间变长。
对于 OceanBase 数据库 V2.X 版本,还对每台物理机上的分区数目做出了限制,计算公式如下:
OceanBase 数据库 V2.1.1 及以前的版本中,由于没有使用分区组(Partition Group,以下简称 PG),假设租户当前分区总数为 num,根据如下计算公式进行评估:
其中
partition_mem表示分区使用的内存,num表示分区数量。partition_mem = 128 KB * num + ``max{1000, num/10}`` * 400 KB说明
需要确保算出来的值不能超过租户可用内存上限,否则需调大租户内存规格。
单机租户允许创建的最大分区数量为
(max_memory - memstore_limit``)/ partition_mem。其中partition_mem表示分区使用的内存,max_memory为创建租户时指定的最大内存,memstore_limit表示 memstore 能够使用的内存上限。计算方式为memstore_limit_percentage * min_memory,其中min_memory为创建租户时指定的最大内存,memstore_limit_percentage为系统配置项,有关memstore_limit_percentage的详细信息,请参见《OceanBase 数据库 参考指南》中的 配置项 章节。对于 OceanBase 数据库 V2.2.X 及以后的版本,如果使用了 PG 功能,由于一个 PG 中可能包含很多分区,其内存开销要比普通的单个分区大,按每个 PG 预留 (528KB+1MB)内存来计算,根据系统已有的 PG 数量计算需要为 PG 预留的内存。