介绍shared pool物理结构的heap 堆,extent 区,chunk
内存中:共享池、大池、PGA是heap管理
chunk
shared pool物理层面上由许多内存块组成,这些内在块称为chunk,chunk是shared pool中内存分配最小单位-类似extent,但是chunk是大小不一的,在内存中一个chunk是连续的。
chunk属于可用类型的时候,既不属于library cache,也不属于dictionary cache,
如果chunk被用于存放SQL相关的数据时,则该chunk就属于library cache;
如果该chunk被用于存放数据字典的信息时,则该chunk就是属于dictionary
Chunk可以分为4类-或者叫4种状态:
1.free:chunk中没有有效的对象,可以不受限制的分配
2.recr:recreatable,--可重用的,chunk里面包含的对象可以被临时性的移 走,如果需要,可以重建,例如共享SQL语句
3.freeabl:--可释放的,session用过这个chunk,里面存放的对象数据是session 在处理过程中产生的,没有办法重建,这点不同于recr。因此这个chunk不能被临时性的移走。但是在合适的时间段可以被释放。
4.perm:permanent,--永久的SGA的固定对象等,chunk中包含永久性的对象,但是大型的permanent类型的chunk中可能包含可用空间,需要的时候,这些空间可以被释放。
x$ksmsp
x$ksmsp名称含义为: kernal storage memory management sga heap
注意:据说在10.1.0.2版本中某些平台上查询此视图会有BUG导致CPU过载
SYS@ bys3>desc x$ksmsp
Name
------------
ADDR --x$ksmsp视图中一行信息在内存中地址
INDX --
INST_ID --
KSMCHIDX --
KSMCHDUR --
KSMCHCOM --chunk描述
KSMCHPTR --CHUNK地址
KSMCHSIZ --代表chunk大小
KSMCHCLS --chunk类型--freeabl-recr-perm-free
KSMCHTYP --
KSMCHPAR --父对象的地址--可能是
x$kglob.KGLOBHD0
SYS@ bys3>select count(*) from x$ksmsp; --每个chunk在x$ksmsp中都有记录,可以统计出chunk数量
COUNT(*)
----------
18224
SYS@ bys3>select * from bys.test;
SYS@ bys3>select * from bys.test where status=2;
SYS@ bys3>select count(*) from x$ksmsp;
--执行几个SQL语句后,CHUNK数量会增加。因为进行SQL解析,请求空间,导致分配、分割从而产生更多CHUNK。
COUNT(*)
----------
18251
如数据库存在大量硬解析,不停请求分配free的共享池内存,会引起shared pool latch,以及shared pool产生更多碎片。--内存回收时,chunk数量会减少。
查看Chunk的4种状态:--R-freea这种R开头的是在Reserved Area(保留区)中的chunk
SYS@ bys3>select distinct(ksmchcls) from x$ksmsp;
KSMCHCLS
--------
freeabl
recr
perm
R-freea
R-free
R-perm
free
R-recr
查询各种状态chunk的大小,chunk的平均大小
SYS@ bys3>select KSMCHCLS,count(*) ,round(sum( KSMCHSIZ/1024/1024),0) MB,round(avg(KSMCHSIZ),0) from x$ksmsp group by KSMCHCLS order by 1;
KSMCHCLS COUNT(*) MB ROUND(AVG(KSMCHSIZ),0)
-------- ---------- ---------- ----------------------
R-free 43 6 152374
R-freea 98 0 3915
R-perm 4 16 4111578
R-recr 1 4 3977200
free 1937 0 226
freeabl 5815 11 2057
perm 271 89 343653
recr 11127 13 1250
###################
共享池中的 heap 堆和extent 区
heap 堆由一个或多个大小不一的extent组成,extent由chunk组成
SubPool 子池
SubPool:最多7个 (4cpu-->1,128M(9i),256M(10g),512M(11g))
alter system set "_kghdsidx_count"=2 scope=spfile;
DUMP 共享池查看heap/extent/chunk结构:--用新建会话来做
alter session set events 'immediate trace name heapdump level 2';
select value from v$diag_info where name like 'De%';
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_7876.trc
查看TRACE文件内容: --找这一段的方法:VI搜索HEAP DUMP
******************************************************
HEAP DUMP heap name="sga heap" desc=0x200010b4
extent sz=0x7ad4 alt=124 het=32767 rec=9 flg=-126 opc=0 --
-sz=0x7ad4 转换为十进制大小是:31444
parent=(nil) owner=(nil) nex=(nil) xsz=0x0 heap=(nil)
fl2=0x60, nex=(nil)
ds for latch 1: 0x20030f24
reserved granule count 0 (granule size 4194304)
******************************************************
HEAP DUMP heap name="sga heap(1,0)" desc=0x20030f24
---heap name="sga heap(1,0)" 共享池中第1个子池 --高级堆的子缓冲区--共享池的
extent sz=0xfc4 alt=124 het=32767 rec=9 flg=-126 opc=0
--sz=0xfc4 0xfc4转换为十进制大小是:4036,更大的在保留池
parent=(nil) owner=(nil) nex=(nil) xsz=0x400000 heap=(nil)
fl2=0x20, nex=(nil), dsxvers=1, dsxflg=0x0
dsx first ext=0x2c400000
latch set 1 of 1
durations disabled for this heap
reserved granules for root 0 (granule size 4194304)
EXTENT 0 addr=0x23c00000 ---EXTENT 0,向下搜索还有多个EXTENT的,一个
EXTENT有多个Chunk
Chunk 23c00038 sz= 24 R-stopper "reserved stoppe"
Chunk 23c00050 sz= 14300 R-free " "
Chunk 23c0382c sz= 8224 R-freeable "KKSSP^38 " ds=0x23d8f480
Chunk 23c0a8e4 sz= 169732 R-free " "
Chunk 23c33fe8 sz= 24 R-stopper "reserved stoppe"
Chunk 23c34000 sz= 15776 perm "perm " alo=15776
Chunk 23c37da0 sz= 84 free " " -- free状态的CHUNK,23c37da0 内存地址,84字节,可以看到各chunk大小不一
Chunk 23c37df4 sz= 236 recreate "KGLHD " latch=(nil) ---recreate状态的CHUNK,
latch=(nil) 没有latch
Chunk 23bfadc8 sz= 4124 freeable "PLMCD^f24c7997 " ds=0x24609ea8
Chunk 23bfbde4 sz= 4096 recreate "SQLA^9d1660bd " latch=(nil)
ds 23f49e9c sz= 12288 ct= 3
24177984 sz= 4096
239fa8bc sz= 4096
…………………………
EXTENT 30 addr=0x2ac00000 --EXTENT有很多个。。
Chunk 2ac00038 sz= 24 R-stopper "reserved stoppe"
Chunk 2ac00050 sz= 212888 R-free " "
Chunk 2ac33fe8 sz= 24 R-stopper "reserved stoppe"
Chunk 2ac34000 sz= 3971084 perm "perm " alo=3971084
Chunk 2affd80c sz= 10096 perm "perm " alo=10096
Chunk 2affff7c sz= 28 freeable "PRESENTATION EN"
Chunk 2affff98 sz= 104 freeable "Label Cache Hea"
EXTENT 31 addr=0x2b000000