首批通过分布式安全可靠测评,为关键业务系统打造
memory_limit
更新时间:2026-05-25 15:11:37
说明
该配置项从 V1.4 版本开始引入。
功能描述
memory_limit 用于设置 OBServer 可用的总内存大小。
OBServer 上 memory_limit 设置生效需要同时满足两个条件:
- 500 租户的预留内存需要不小于实际占用内存。
memory_limit取值需高于system_memory和 Unit 已分配内存之和。
在不满足以上限制条件时,设置 memory_limit 不会报错,也不生效。
权限要求
查询配置项
sys租户和所有用户租户均可以使用SHOW PARAMETERS语句或视图GV$OB_PARAMETERS查询该配置项。修改配置项
仅
sys租户可以修改该配置项,用户租户不能修改该配置项。
属性说明
| 属性 | 描述 |
|---|---|
| 参数类型 | Capacity |
| 默认值 | 0,单位为 MB。 |
| 取值范围 | [1G, +∞)
说明
|
| 是否可修改 | 是,支持通过 ALTER SYSTEM SET 语句修改。 |
| 是否重启 OBServer 节点生效 | 否,设置后立即生效。 |
使用说明
memory_limit的默认值为0。如果该值不为0,则系统会忽略memory_limit_percentage的设置而优先使用memory_limit配置的值。例如,一台物理机的内存为 100 GB,memory_limit_percentage设置为80,表示使用 80% 的内存,而memory_limit参数设置为'90G',则实际物理机上 OceanBase 数据库可分配的内存使用memory_limit的配置,即 90 GB。有关memory_limit_percentage的详细信息请参见 memory_limit_percentage。memory_limit的默认单位为 MB。例如,memory_limit='40G'表示设置 OceanBase 数据库进程的使用内存上限是 40 GB。由于默认单位为 MB,则memory_limit=40960与memory_limit='40G'设置的值相同。memory_limit的值目前无上限。如果设置的内存最大上限超过了实际的物理内存总和,则会导致系统中其他按总内存计算的值偏大。
如果希望限制运行中的 OceanBase 数据库的内存大小,可以直接修改
memory_limit的值,使其达到预期。设置后,后台参数 Reload 线程会使其动态生效,无需重启。但是在设置时,需要保证memory_limit的值小于系统总的值。注意
memory_limit的值必须大于 OBServer 节点实际已使用的内存。
配置示例
例如设置 OBServer 可用的总内存为 32 G,命令如下:
obclient> ALTER SYSTEM SET memory_limit='32G';查询当前已使用的内存数(单位为 GB)的方法如下:
obclient> SELECT value/1024/1024/1024 used_gb FROM v$sysstat WHERE name LIKE '%observer memory%' AND con_id = 1 AND stat_id=140008 AND name='observer memory used size';