-
free -h
-
-
col name for a40
-
col value for a10
-
select nam.ksppinm name, val.ksppstvl value from x$ksppi nam, x$ksppsv val
-
where nam.indx = val.indx and nam.ksppinm like '%shared_pool%' order by 1;
-
-
select name,round(bytes/1024/1024)m from v$sgainfo;
-
-
--排查ora-4031问题,不要在业务高峰期执行
-
select ksmchcls class, count(ksmchcls) num, round(sum(ksmchsiz/1024/1024)) size_mb, to_char( ((sum(ksmchsiz)/count(ksmchcls)/1024)),'999,999.00')||'k' "avg size" from x$ksmsp group by ksmchcls order by 1 desc;
-
class 分别是:普通sub pool的permanent, freeable, or recreatable 内存和reserve pool的permanent, freeable, or recreatable 内存分类。
加注:
当一个内存块被分配到内存池中时,它会被赋予一个内存类型,包括 permanent,freeable 或者 recreatable。这些内存块之后会被赋予一种池中的内存结构或者元素。例如"kgls heap"。这些内存结构或元素并不总是会在数据字典中被追踪或者注释(特别是 permanent 类型的那些)。
块的类型:
normal (freeable) chunks – 这些块所分配的方式使得当内存处理结束时,用户可以显式的释放内存块。
free chunks – 这些块是空闲的,当有小于或等于块大小的请求进入池中时,就可以重用。
recreatable chunks – 这是一种特殊形式的"freeable"内存。当它们没有被 pin 的时候,这些块放在 lru 列表里。如果需要内存,我们会到 lru 列表内释放一段时间没有使用的“recreatable”内存。
permanent chunks – 这些块以不同的方式分配。一些块分配后会在实例的整个生命周期中存在。一些块分配后只要可用,会被内部反反复复的使用。
通过设置事件,可以把 permanent 块标注为其它类型的内存块来进行调试。
-
set pages 100
-
break on ksmchidx skip 1
-
select ksmchidx,ksmchdur, ksmchcls class, count(ksmchcls) num, sum(ksmchsiz) siz,
-
to_char( ((sum(ksmchsiz)/count(ksmchcls)/1024)),'999,999.00')| |'k' "avg size"
-
from x$ksmsp group by ksmchidx,ksmchdur, ksmchcls order by 1,2,3;
-
-
col sga_heap for a22
-
select 'sga heap('||ksmchidx||',0)'sga_heap,ksmchcom chunkcomment,
-
decode(round(ksmchsiz/1000),0,'0-1k', 1,'1-2k', 2,'2-3k',
-
3,'3-4k',4,'4-5k',5,'5-6k',6,'6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10k') "size",
-
count(*), ksmchcls "status", sum(ksmchsiz) "bytes" from x$ksmsp
-
where ksmchcom = 'free memory' group by 'sga heap('||ksmchidx||',0)',
-
ksmchcom, ksmchcls, decode(round(ksmchsiz/1000),0,'0-1k', 1,'1-2k', 2,'2-3k',
-
3,'3-4k',4,'4-5k',5,'5-6k',6,'6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10k') order by 1,2;
-
-
` kgh: no access `是指在asmm中传输的颗粒,即内存从共享池重新分配到数据库缓冲缓存,反之亦然。
-
这个在共享池中标记为“kgh: no access”的内存组件由缓冲缓存使用。
-
当通过设置sga_target参数启用asmm(自动共享内存管理)时,可以看到该组件的值在增加。
-
当asmm启用时,oracle将根据需求动态管理可调内存池之间的内存分配。
-
请注意,当启用asmm时,仍然可以为每个可调参数指定一个值,即共享池、数据库缓冲区缓存、大池、java池和流池。当为每个可调参数设置{banned}{banned}最佳佳xiao值时,oracle将确保分配给相应池的内存数量不会缩小到指定的数量以下。
-
因此,通过为共享池和数据库缓冲区缓存设置{banned}{banned}最佳佳xiao值,我们将确保在两个池之间重新分配可用的内存数量将更少,从而防止此` kgh: no access `组件的增长。