OceanBase 数据库支持通过参数来设置和管理内存的使用。
说明
有关以下提到的参数的详细介绍,请参见 系统配置项 章节。
OBServer 总内存
表示 OBServer 所有内存的上限,即所有租户累加不可能超过的上限,由两个参数控制:
memory_limit_percentage:物理机或者容器物理内存的百分比。
memory_limit:绝对数值。
当 memory_limit 非 0 时,使用 memory_limit 作为上限,否则使用 memory_limit_percentage 计算后的值作为上限。
高优先级预留内存
表示给一些特别重要的底层模块预留的一块空间。
可以通过 memory_reserved 参数进行设置。
500 租户内存
表示 500 租户预留内存,可以通过 system_memory 参数进行设置。
注意它不是 limit 的语义,目前的实现上 500 租户实际可使用内存是可能突破 system_memory 的,但其他租户可使用内存不会超过 OBServer 总内存(即 system_memory 的值)。
业务租户内存
业务租户内存由租户创建 unit 时指定。命令示例如下。
create resource unit if not exists sp_trans_test MAX_CPU=1, MEMORY_SIZE='5G', MAX_IOPS=128000, MIN_IOPS=128000, LOG_DISK_SIZE='2G';
create resource pool if not exists sp_trans_test unit='sp_trans_test', unit_num=1;
create tenant if not exists sp_trans_test RESOURCE_POOL_LIST=('sp_trans_test') set ob_tcp_invited_nodes='%';
OceanBase 数据库支持动态调整 unit 规格(缩容需谨慎)。
alter RESOURCE UNIT sp_trans_test MAX_CPU=1, MEMORY_SIZE='6G';
系统租户可以通过视图查询 unit 规格。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS\G
*************************** 1. row ***************************
UNIT_CONFIG_ID: 1
NAME: sys_unit_config
MAX_CPU: 2.5
MIN_CPU: 2.5
MEMORY_SIZE: 17179869184
LOG_DISK_SIZE: 17179869184
MAX_IOPS: 25000
MIN_IOPS: 25000
IOPS_WEIGHT: 2
*************************** 2. row ***************************
UNIT_CONFIG_ID: 1001
NAME: unit001
MAX_CPU: 2
MIN_CPU: 2
MEMORY_SIZE: 6442450944
LOG_DISK_SIZE: 19327352832
MAX_IOPS: 20000
MIN_IOPS: 20000
IOPS_WEIGHT: 2
*************************** 3. row ***************************
UNIT_CONFIG_ID: 1004
NAME: sp_trans_test
MAX_CPU: 1
MIN_CPU: 1
MEMORY_SIZE: 5368709120
LOG_DISK_SIZE: 2147483648
MAX_IOPS: 128000
MIN_IOPS: 128000
IOPS_WEIGHT: 0
3 rows in set
租户内存分类
租户内存分为两类,memstore 与 SQL 执行。
memstore
主要用于保存数据库增量数据。memstore 上限由参数 memstore_limit_percentage 控制,它表示租户 memStore 最多占租户总内存上限的百分比。freeze_trigger_percentage 参数用于控制转储时机,它表示当 memstore 内存达到 memstore 上限的某个百分比时触发转储,租户 memstore 的使用可以通过内部表查看 。
MySQL [oceanbase]> select * From gv$memstore; +-----------+----------------+-------+-----------+-----------+---------------------+---------------------+------------+ | TENANT_ID | IP | PORT | ACTIVE | TOTAL | FREEZE_TRIGGER | MEM_LIMIT | FREEZE_CNT | +-----------+----------------+-------+-----------+-----------+---------------------+---------------------+------------+ | 1 | 100.81.113.215 | 46824 | 169792200 | 171966464 | 5153960700 | 10307921440 | 0 | | 500 | 100.81.113.215 | 46824 | 0 | 0 | 3689348814741910300 | 7378697629483820640 | 0 | | 1001 | 100.81.113.215 | 46824 | 33539200 | 35651584 | 382730200 | 858993440 | 0 | | 1002 | 100.81.113.215 | 46824 | 0 | 228589568 | 34359738350 | 68719476720 | 0 | +-----------+----------------+-------+-----------+-----------+---------------------+---------------------+------------+SQL 执行
表示 SQL 执行所需要的内存以及为了提高吞吐做的缓存,比如 SQL 执行计划等。
ob_sql_work_area_percentage 是 SQL 工作区内存参数,表示 SQL 可能耗费大量内存的阻塞性算子所使用的内存。
sys 租户内存
前面提到,sys 租户就是实体租户,它的管理机制与业务租户完全一致。




