Oceanbase 内存应该够,但是不允许我分配内存,说内存不足

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.1
【问题描述】

使用的是 k8 和 ob-operator 部署的三 zone oceanbase。部署集群时分配了 16G 内存。
系统内 memory_limit 显示 14745M。
然后使用 SELECT * FROM oceanbase.GV$OB_SERVERS; 查看可分配内存 10092544000
10092544000 / 1024 / 1024 大约 9625M
那么 14745M - 9625M = 5120M
刚好是 sys_unit_config 默认配置的 5120M

那么

  1. 9625M 是当前可以分配的内存总量么?
  2. 如果是的话,那我创建资源池时,分配 6G 内存为什么报内存不足?

以下是我创建资源池的语句:

CREATE RESOURCE UNIT unit1
MAX_CPU 2, MEMORY_SIZE '6G', MAX_IOPS 1280, LOG_DISK_SIZE '10G', MIN_IOPS=1024, IOPS_WEIGHT=1;

CREATE RESOURCE POOL pool1
UNIT unit1,
UNIT_NUM 1,
ZONE_LIST ('zone1','zone2','zone3');

1、9625M是可以分配的内存总量,但是是包含sys_unig_config的
2、业务租户可使用的内存=memory_limit-system_memory-sys_unit_config中的内存
14745M - 9625M = 5120M这个就是system_memory
sys_unit_config的memory占用是5120M
那业务租户可使用的内存=9625M-5120M=4505M,所以你创建6G的unit会报错

1 个赞

想要查询内存使用情况可以去查询gv$ob_servers视图
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000820318

1、9625M 是当前集群租户可用内存的上限,还有部分资源被租户共享的资源占了(system_memory),大小是你这里查的sys_unit_config 默认配置的 5120M。
2、 memory_limit 显示 14745M 是不是配置集群的时候设置了参数为这个大小?
3、memory_limit 与memory_limit_percentage 两者都配置只有其中一个起作用,如果设置了memory_limit则就限定OB集群能使用的主机的内存上限(租户可以分配使用的内存上限需要减去system_memory部分),如果没有设置memory_limit则是memory_limit_percentage*机器的内存大小;

谢谢了