shared pool之一:heap /extent /chunk/x$ksmsp

来源:互联网 发布:淘宝房屋司法拍卖平台 编辑:程序博客网 时间:2024/05/21 15:39
介绍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

0 0
原创粉丝点击