sys租户执行语句报错内存不足

sys租户执行select * from dba_ob_tenants;报错 no memory or reach tenant memory limit ,并且只有在查询dba_ob_tenants表时才会报这个错误,查询其它表则正常,sys租户的unit内存配置为10G,并且租户下gv$ob_sql_audit中没有看到有active的语句。数据库版本是4.4.1.0

2 个赞

还没有创建其他租户,想办法修改sys租户内存,把他修改小一点试一试

2 个赞

还有一个业务租户,unit是1G。

2 个赞

最开始报错的时候sys租户内存是1G,后面改为了10G还是报错

1)设置trace信息
SET ob_enable_show_trace=‘ON’;

2)执行sql。

3)获取上个命令的trace
select last_trace_id();

4)获取trace对应的节点
select query_sql,svr_ip from gv$ob_sql_audit where trace_id=‘第三步获取的trace信息’;

5)取对应的svr_ip节点 过滤日志
grep “第三步获取的trace信息” observer.log*
grep “第三步获取的trace信息” rootservice.log*

6)提供日志信息即可。
麻烦协助获取一份日志看下

1 个赞

我们把业务租户unit的内存上限改为了5G,之后再用sys租户查询dba_ob_tenants就没有报错了,这是为什么

现在可以了,还需要trace日志吗

需要报错时候的日志。目前执行成功后的日志不需要了

只在observer.log*中有查询到trace日志,如下

这边复现一下看看

1 个赞

用obdiag诊断下

3 个赞

好工具

检查内存配置

  • 检查 sys 租户的内存配额:你可以通过查询 dba_ob_tenantsgv$memory_limit 表,确认该租户的内存配额是否已经用尽,或者是否被限制。
SELECT tenant_id, tenant_name, memory_limit, memory_used 
FROM gv$memory_limit WHERE tenant_id = <sys租户的tenant_id>;
  • 查询资源使用情况:使用以下查询检查当前租户的内存使用情况:
SELECT * FROM gv$memory_resource WHERE tenant_id = <sys租户的tenant_id>;
1 个赞

obdiag

我这边的内核版本是4.19

dba_ob_tenants视图内部涉及多个虚拟表,其中会涉及到业务的meta租户表。新版新增了很多功能都会占用一些内存,1g内存偏小,在不使用租户情况下,内存可能就会超限推荐下次至少部署2g的来使用吧。