Giant
2024 年7 月 8 日 14:14
#1
【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
OBD-4366: There is not enough memory
问题:租户创建完毕,内存还剩下1G ,我的memory_limit 是 12G 三个租户每个2G ,一个system_memory 5G ,正好剩下1G , 我给的ocp-server的服务是4G , 我的服务器是 64G ,结果报库错误。 是不是应该直接从服务器拿走内存, 而不应该被memory_limit参数限制呢?
1 个赞
辞霜
2024 年7 月 8 日 14:23
#3
memory_limit_percentage是百分比参数直接从服务器拿走内存,memory_limit是固定限制需要手动调整
2 个赞
淇铭
2024 年7 月 8 日 14:25
#4
1.通过SELECT * FROM oceanbase.GV$OB_SERVERS或show parametres like 'memory_limit’查看我们的memory_limit设置的大小
2.通过show parametres like ‘system_memory’;确认system_memory的大小。
3.租户可以分配的内存=memory_limit-system_memory
注意:租户可以分配的内存=用户租户内存+系统租户内存
4.系统租户是 OceanBase 数据库的集群管理员为安装 OceanBase 数据库时自动创建。V4.2.1 版本前,系统租户实际可使用的内存上限为 sys_unit_config.memory_size。从 V4.2.1 版本开始,系统租户实际可使用的内存上限为:hidden_sys_memory + sys_unit_config.memory_size。
sys_unit_config.memory_size 的值由资源规格 sys_unit_config 中的 memory_size 决定。sys_unit_config 是系统租户默认的资源规格,其默认的内存资源为最小资源。由于系统租户也是一个正常的租户,故可以通过 ALTER RESOURCE 语句修改 sys_unit_config 中 memory_size 的值。
hidden_sys_memory 的值由隐藏配置项 _hidden_sys_tenant_memory 控制。隐藏配置项 _hidden_sys_tenant_memory 的默认值为 0G,表示系统会按照一定的规则进行自适应分配 hidden_sys_memory 的值。不建议修改隐藏配置项 _hidden_sys_tenant_memory 的值。
系统租户查看信息
查看sys_unit_config.memory_size参数
select name,concat(round(memory_size/1024/1024/1024),“G”) memory_size from DBA_OB_UNIT_CONFIGS where name=‘sys_unit_config’;
2 个赞
Giant
2024 年7 月 8 日 15:34
#5
我这报的内存不足 是这个进程需要 4G , 但是memory_limit -system_memory-其他租户内容=1G 。OCP的进程内存 也需要满足 memory_limit的 限制吗??
1 个赞
淇铭
2024 年7 月 8 日 15:37
#6
你这是怎么规划搭建的 具体说一下?还有ocp在一起搭建的么?还是分开搭建的?
1 个赞
Giant
2024 年7 月 8 日 15:47
#7
ocp + ob(cop的数据库) 都在一台机器上 机器64G 内存
1 个赞
Giant
2024 年7 月 8 日 16:10
#8
我的意思是他不应该 在memory_limit 内存里面考虑内存够不够的问题吧 ?
1 个赞
淇铭
2024 年7 月 8 日 16:15
#9
你是用obd白屏化搭建的ocp么?还是直接用ocp的包搭建的ocp
1 个赞
Giant
2024 年7 月 9 日 09:58
#10
ocp-all-in-one这个程序报 版本是4.2.1
1 个赞
辞霜
2024 年7 月 10 日 16:09
#12
根据你的截图分析,你这应该是通过已有 metadb 部署 ocp. 你框柱报错的上面一行日志是在查询你的meta db 当前剩余的可分配内存,查出来是 1G。 而创建 ocp 的 meta 租户 + monitor 租户一共需要4G
看你的计算逻辑 你缺少了 sys 租户内存的计算。一下是具体的计算逻辑:
ob可分配内存 = memory_limit - system_memory - sys租户内存 - 业务租户内存
部署ocp需要可分配内存 >= ocp_meta_tenant memory_size +ocp_monitor_tenant memory_size
ocp 部署还有一个应用的需要的内存 (ocp java进程需要的内存)这个是从服务器内存获取的
2 个赞