暂无图片
OB500租户内存占用率超限疑问
我来答
分享
BBQ
2023-01-06
OB500租户内存占用率超限疑问

OB500租户内存占用率超限告警项官方描述是select sum(hold), sum(used) from __all_virtual_memory_info where tenant_id = 500 and svr_ip = @svr_ip and svr_port = rpc_port(); 说明 * mem_hold:取 sum(used) 字段值。 * mem_total:取 sum(hold) 字段值。

(1 )OCP推送的告警值为131.969 %,后台怎么查询都对不上这个百分比。






(2)理解的是500租户是一些特殊的内部对象,官方文档的处理方法是去查看SYS租户的内存使用率,二者间有什么联系吗?总感觉官方文档对应500租户内存占用率过高这个告警项描述和处理方法均存在问题

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
shunwahⓂ️

OceanBase 数据库是多租户设计的数据库,同一个进程会运行着多个租户的请求,从租户资源划分上可以分为三类,500 租户内存、系统租户内存、业务租户内存。

500 是个特殊的虚拟租户,共享性的、非实体租户消耗的内存都被 OceanBase 数据库划归 500 租户。

系统租户是 OceanBase 数据库自动创建的第一个实体租户,管理着集群相关的内部表,这些内部表上的请求触发的内存就划归到了 sys 租户。

业务租户就是集群安装后有 DBA 创建的跑业务流量的实体租户,这些租户的请求触发的内存就划归租户自己。

500 租户内存
表示 500 租户预留内存,可以通过 system_memory 参数进行设置。

注意它不是 limit 的语义,目前的实现上 500 租户实际可使用内存是可能突破 system_memory 的,但其他租户可使用内存不会超过 OBServer 总内存(即 system_memory 的值)。

image.png

500 租户内存超限
tenant_id =500 的租户是 OB 内部租户,简称 500 租户。正常情况下,该报错会多次出现,最可能是机器系统内存被耗光或当前机器剩余内存已被预分配,用户无法再扩展。

这种报错需要查看内存被占用情况,500 租户的内存使用量没有被 vmemory 和 gvmemory 统计,需要查询__all_virtual_memory_info 表,同时排查系统中内存的使用情况。如果是机器系统内存被耗光,判断是否为系统偶发情况。如果是,且同时没有业务影响,可等系统自行释放内存;如果有大的业务影响或系统正常进程活动导致内存被占用以及内存被预分配等情况,可考虑增加内存,具体操作步骤请参见 如何通过命令对租户进行扩容与缩容。

SELECT * FROM OCEANBASE.__all_virtual_memory_info WHERE tenant_id=500;
//排查系统内存使用命令
复制
暂无图片 评论
暂无图片 有用 3
打赏 0
暂无图片
watson
2023-01-06
大佬回答的很详细哇,路过学习下。
BBQ

实际上是OCP告警项的官方文档描述错误,实际计算规则为:

select t1.svr_ip,t1.svr_port,t1.used_bytes,t2.mem_total total_bytes,round(t1.used_bytes/t2.mem_total*100,2) used_percent
from (select svr_ip,svr_port,sum(hold) used_bytes
from __all_virtual_memory_info
where tenant_id = 500
group by svr_ip,svr_port) t1,__all_virtual_server_stat t2
where t1.svr_ip=t2.svr_ip
and t1.svr_port=t2.svr_port
;

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交