Oracle内存全面分析(12)- Dump内存解析
2014-11-14 12:02
387 查看
Oracle内存全面分析(12)
4.Dump内存解析
下面以sharedpool为例,解释一下dump出来的内存结构。SQL>connsys/sysassysdba
Connected.
SQL>oradebugsetmypid
Statementprocessed.
SQL>oradebugdumpheapdump2
Statementprocessed.
SQL>
以下时trace文件的内容,我们分别解释各个部分:
Dumpfilec:\oracle\product\10.2.0\admin\fuyuncat\udump\fuyuncat_ora_4032.trc
TueJul1116:03:262006
ORACLEV10.2.0.1.0-Productionvsnsta=0
vsnsql=14vsnxtr=3
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions
WindowsXPVersionV5.1ServicePack2
CPU:2-type586
ProcessAffinity:0x00000000
Memory(Avail/Total):Ph:885M/2039M,Ph+PgF:2702M/3890M,VA:1590M/2047M
Instancename:fuyuncat
Redothreadmountedbythisinstance:1
Oracleprocessnumber:18
Windowsthreadid:4032,image:ORACLE.EXE(SHAD)
***SERVICENAME:(SYS$USERS)2006-07-1116:03:26.322
***SESSIONID:(159.7)2006-07-1116:03:26.322
这部分是关于trace文件的基本信息,oracle版本、资源情况、用户和会话等。
KGHLatchDirectoryInformation
ldirstate:2nextslot:75
Slot[1]Latch:03C3D280Index:1Flags:3State:2next:00000000
Slot[2]Latch:1EC9D4B0Index:1Flags:3State:2next:00000000
Slot[3]Latch:1EC9D540Index:1Flags:3State:2next:00000000
Slot[4]Latch:03C3E100Index:1Flags:3State:2next:00000001
Slot[5]Latch:1ED65CE4Index:1Flags:3State:2next:00000000
Slot[6]Latch:1ED65F14Index:1Flags:3State:2next:00000000
......
这部分记录的是sharedpool中的latch信息。每个latch的具体信息可以通过视图V$LATCH、V$LATCH_PARENT、V$LATCH_CHILDREN或者表x$ksllt查出
******************************************************
HEAPDUMPheapname="sgaheap"desc=03C38510
extentsz=0x32c8alt=108het=32767rec=9flg=-126opc=0
parent=00000000owner=00000000nex=00000000xsz=0x10
******************************************************
这是堆dump信息的头部,heapname说明了内存所述的堆,sharedpool是属于SGA区的,因此,这里是"sgaheap";
extentsz记录的是所有扩展段的大小。
HEAPDUMPheapname="sgaheap(1,0)"desc=04EC131C
extentsz=0xfc4alt=108het=32767rec=9flg=-126opc=0
parent=00000000owner=00000000nex=00000000xsz=0x400000
EXTENT0addr=1CC00000
Chunk1cc00038sz=24R-freeable"reservedstoppe"
Chunk1cc00050sz=212888R-free""
Chunk1cc33fe8sz=24R-freeable"reservedstoppe"
Chunk1cc34000sz=3977544perm"perm"alo=3977544
Chunk1cfff148sz=3768free""
EXTENT1addr=1D000000
Chunk1d000038sz=24R-freeable"reservedstoppe"
Chunk1d000050sz=212888R-free""
Chunk1d033fe8sz=24R-freeable"reservedstoppe"
Chunk1d034000sz=2097168perm"perm"alo=2097168
这部分信息是trace文件中的主要部分,它详细记录了sharedpool中各个chunk的信息。
首先看它的头部信息,注意到这里heapname是"sgaheap(1,0)"。这是什么意思呢?我们前面提到,oracle10g会将sharedpool分为几个区来管理,这里就是其中的一个区。共有4个区。通过表X$KGHLU可以看到对应的LRU链表。
EXTENT0addr=1CC00000
这一行说明下面的chunk都属于这个扩展段(extent),0是它的编号,addr是它的起始地址。
Chunk1cc00038sz=24R-freeable"reservedstoppe"
这是一个chunk的信息,sz是这个chunk的大小(24字节)。R-freeable是这个chunk的状态,"reservedstoppe"是这个chunk的用途。Chunk有4种可能状态,以下是这四种状态的含义:
free:即空闲chunk,可以随时分配给适合大小的请求;
freeable:这种状态的chunk表示它当前正在被使用,但是这种使用是短期的,比如在一次调用中或者一个会话中,会话或者调用解释就可以被释放出来。这种状态的chunk是不放在LRU链表中的,一旦使用结束,自动成为free状态,放到空闲列表中;
recreatable:这种状态的chunk正在被使用,但是它所包含的对象是可以被暂时移走、重建,比如解析过的语句。它是被LRU链表管理的。
permanent:顾名思义,这种状态的chunk所包含的对象是永远不会被释放的。即使flushsharedpool也不会释放。
我们注意到,这里还有一些状态是有前缀“R-”的。带有这种前缀的chunk说明是sharedpool中的保留区的chunk。
Totalheapsize=41942480
最后是这一sharedpool区的总的大小。
FREELISTS:
Bucket0size=16
Bucket1size=20
Chunk166ed050sz=20free""
Chunk167de068sz=20free""
Chunk164b9c10sz=20free""
Chunk1f2776f8sz=20free""
接下来便是这个sharedpool区的空闲列表。Bucket是一个空闲列表的范围,例如Bucket1,它的最小值是上一个Bucket的最大值,即16,最大值为20。Bucket下面是空闲列表中chunk,后面的信息和前面解释chunk的信息一样,8位的16进制数字是它的地址;sz是chunk的大小;free是chunk的状态,因为是空闲列表中的chunk,这里只有一个状态;最后是chunk的用途(即指X$KSMSP中的KSMCHCOM字段值,如其值可以为sessionparam、multiblock
read、librarycache、sqlarea、PL/SQLMPCODE、KGLhandles、dictionarycache、freememory、rowcachelru、permanentmemory等,或是librarycacheobject的类型??),因为都是free,所以肯定为空。
Totalfreespace=1787936
最后是这块sharedpool区中空闲chunk的总的大小。
RESERVEDFREELISTS:
Reservedbucket0size=16
Reservedbucket1size=4400
Reservedbucket2size=8204
Reservedbucket3size=8460
Reservedbucket4size=8464
Reservedbucket5size=8468
Reservedbucket6size=8472
Reservedbucket7size=9296
Reservedbucket8size=9300
Reservedbucket9size=12320
Reservedbucket10size=12324
Reservedbucket11size=16396
Reservedbucket12size=32780
Reservedbucket13size=65548
Chunk1b800050sz=212888R-free""
Chunk16c00050sz=212888R-free""
Chunk1ac00050sz=212888R-free""
Totalreservedfreespace=638664
Sharedpool的普通区的空闲列表下面就是关于这块sharedpool区中保留区的空闲列表的描述,其中除了在名字上bucket前面都有一个Reserved标识,和状态前面有“R-”前缀外,含义和普通空闲列表相同。
UNPINNEDRECREATABLECHUNKS(lrufirst):
Chunk1aee99c0sz=4096recreate"sqlarea"latch=1D8BDD48
Chunk1ae4aeecsz=4096recreate"sqlarea"latch=1D8BDDB0
......
SEPARATOR
Chunk166e8384sz=540recreate"KQRPO"latch=1DD7F138
Chunk1f333a5csz=284recreate"KQRPO"latch=1DC7DFC8
Chunk166e9340sz=540recreate"KQRPO"latch=1DE00A70
Chunk1f0fe058sz=284recreate"KQRPO"latch=1DC7DFC8
Chunk1f2116b4sz=540recreate"KQRPO"latch=1DE81910
Chunk1f21127csz=540recreate"KQRPO"latch=1DE81910
......
Unpinnedspace=1611488rcr=645trn=864
空闲列表后面就是LRU链表了。LRU链表不是按照大小分的,因而没有Bucket。它的chunk是按照最近最少使用的顺序排列。其中chunk的信息和前面解释的一样。但是要注意一点,因为LRU链表中的chunk都是使用的,因为每个chunk根据用途不同,都会有一个latch来保护,Chunk信息最后便是latch的地址。
注意,我们前面提到,sharedpool中是有两种LRU链表的,一种循环LRU链表;另外一种是暂时LRU链表。在这里LRU信息中前面部分是循环LRU链表,SEPARATOR后面部分是暂时LRU链表信息。
最后是LRU链表中chunk的总的大小,rcr是循环LRU链表中的chunk数,trn是暂时LRU链表中的chunk数。
此外,有一点提示,如果是有多个sharedpool区,第一个区是不含LRU链表信息的。
PERMANENTCHUNKS:
Chunk1d234010sz=1884144perm"perm"alo=1728440
Chunk1cc34000sz=3977544perm"perm"alo=3977544
Chunk1d034000sz=2097168perm"perm"alo=2097168
Chunk1d434000sz=3117112perm"perm"alo=3117112
......
Chunk1f434000sz=3917704perm"perm"alo=3917704
Permanentspace=38937696
最后是永久chunk的信息。Chunk部分解释和前面一致。alo表示已经分配的大小。
如果有多个sharedpool区,永久chunk信息则只存在于第一个sharedpool区。
注释:
sharedpool区就是指sharedpool这个堆中的一个区段(extent)。
相关文章推荐
- Oracle内存全面分析(12)
- Oracle内存全面分析(12)
- 1. ORACLE内存全面解析
- Oracle内存全面分析(5)
- Oracle内存全面分析(9)
- Oracle内存全面分析(2)-1Oracle 的内存架构组成_1SGA.2Buffer cache的管理、参数以及相关视图
- Oracle内存全面分析(1)
- Oracle内存全面分析(6)
- Oracle内存全面分析(1)
- Oracle内存全面分析
- Oracle内存全面分析(1)-1Oracle 的内存架构组成_1SGA.1SGA简介以及调整参数
- Oracle内存全面分析(3)
- Oracle内存全面分析(5)
- Oracle内存全面分析(4)
- Oracle内存全面分析(10)
- Oracle内存全面分析(11)
- Oracle内存全面分析(4)
- Oracle内存全面分析(3)
- Oracle内存全面分析(8)
- Oracle内存全面分析(3)- Buffer Cache的重要视图和 共享池(Shared pool)