OceanBase 内存
OceanBase 数据库采取占据服务器的大部分内存并进行统一管理的方式来管理内存。
当有新业务需要上线时为其创建一个新租户,其中内存是从租户可分配内存中划分资源,租户 CPU 和内存的大小取决于业务规模。
当可分配的 CPU 和内存资源不足时,可以水平扩展 OceanBase 集群,为不断扩展的业务规模提供可持续的服务能力。
OceanBase 内存结构
OceanBase 数据库内存结构图:
OceanBase 数据库占用了服务器的大量内存 (OBServer Total Memory):
一部分用于自身系统运行(Memory Reserved For OBServer)
一部分用于划分给创建的租户(Allocatable Memory For OBServer)。
每个租户等同于传统数据库的一个实例,不同租户的内存模块组成是一样的,其内存又分为装载增量数据的 MemStore(Tenant MemStore)以及 KVCache 缓存(Tenant Cache Memory)。
OceanBase 数据库内存上限
两种方式设置OceanBase 数据库自身内存的上限:
按照计算机器总内存上限的百分比计算自身可以使用的总内存,由
memory_limit_percentage
参数配置。直接设置 OceanBase 数据库可用内存的上限,由
memory_limit
参数配置。其中memory_limit
参数值为 0 时,使用百分比的配置方式,否则使用绝对值的配置方式。
示例:当在一台 100 GB 的机器上启动一个 OceanBase 数据库实例时,memory_limit_percentage
和 memory_limit
参数的值是如何影响 OceanBase 数据库的内存上限的。
示例 | memory_limit_percentage | memory_limit | OceanBase 数据库内存上限 |
---|---|---|---|
示例 1 | 80 | 0 | 80 GB |
示例 2 | 80 | 90 GB | 90 GB |
示例 1 中由于 memory_limit
为 0,故以 memory_limit_percentage
为准,OceanBase 数据库内存上限为 100GB*80%=80 GB。
示例2 中由于 memory_limit
为 90 GB,故以 memory_limit
为准,OceanBase 数据库内存上限为 90 GB。
目前主流的 OceanBase 数据库服务器一般内存为 384 GB 或 512 GB,384 GB 内存建议配置为使用机器内存的 80%,512 GB 内存建议配置为使用机器内存的 90%。
系统内部内存管理
OceanBase 数据库内存上限中配置的内存并不能全部分配给租户使用
每一个 OBServer 上租户都会共享部分资源或功能。由于这些共享的资源或功能所使用的内存并不属于任何一个普通租户,故这类内存被归结为系统内部内存。
系统内部可使用的内存上限可通过system_memory
参数来配置,该参数表示系统内部可使用 OceanBase 数据库内存的上限。
例如,假设 OceanBase 数据库内存上限为 80 GB,system_memory
的值为 20 GB,那么可用于租户分配的内存就是剩下的 60 GB。
评论
