-
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 `组件的增长。