内存的组成
系统内存
observer内存
memory_limit
memory_limit_percentage
公共内存
system_memory
租户内存
memory_limt/memory_limit_percentage-system_memory
每个租户内部的内存大体上分为两个部分
memstore:不可动态伸缩的内存,用于保存DML产生的增量数据,空间不可被占用。
memstore大小的参数是由memstore_limit_percentage决定,表示租户的memstore部分点租户总内存的百分比,默认是50。当memstore内存使用超过freeze_trigger_percentage定义的百分比时,会触发冻结及后续的转储、合并等操作。
kvcache:可动态伸缩的内存,保存来自sstable的热数据,提高查询速度,大小可以动态伸缩,会被其他各种cache挤占
内存的查看
show parameter like ‘memory%’
show parameter like ‘system%’
show parameter like ‘memstore%’
select * from v
m
e
m
s
t
o
r
e
/
g
v
memstore/gv
memstore/gvmemstore
select * from v$unit
租户内存超限的排查步骤
查看memstore是否超过上限
select
/*+ read_consistency(weak),(query_timeout(100000000) */ tenant_id,ip,round(active/1024/1024/1024,2) active_gb,
round(total/1024/1024/1024,2)total_gb,
round(freeze_trigger/1024/1024/1024,2) freeze_trigger_gb,
round(total/free_trigger,2) percent_trigger,
round(mem_limit/1024/1024/1024,2) mem_limit_gb
from gv$memstore
where tenant_id>1000 or tenant_id=1
order by tenant_id,total_gbdesc
查看total_gb是否已经达到mem_limit_gb,即表示memstore全部写满
查看memstore之外的组件的内存使用情况
select tenant_id,svr_id,mod_name,sum(hold) module_sum
from _all_virtual_memory_info
where tenant_id>1000 and hold>0 and mod_name not in (‘OB_KVSTORE_CACHE’,‘OB_MEMSTORE’)
group by tenant_id,svr_id,mod_name
order by module_sum desc
查看使用超过一定大小的模块
select
from gv$memory
where used>102410241024*10 and context not in (‘OB_MEMSTORE’,‘OB_KVSTORE_CACHE’)
order by used desc
500租户内存超限
tenand_id=500的租户是ob内部租户,简称500租户。它的内存使用情况没有被gv
m
e
m
o
r
y
和
v
memory和v
memory和vmemory统计,需要单独查询_all_virtual_memory_info表
select
svr_ip,mod_name,sum(hold) system_memory_sum
from _all_virtual_memory_info
where tenant_id=500 and hold<>0
group by svr_ip,mod_name
order by system_memory_sum desc
系统内存耗尽
内存的设置
alter system set memory_limit=
alter system set memory_limit_percentage=
alter system set system_memory
alter system set memstore_limit_percentage
alter sytsem set freeze_trigger_percentage