Oracle内存全面分析(12)[HelloDBA.COM]
来源:百度文库 编辑:神马文学网 时间:2024/05/03 08:17:48
4. Dump内存解析
下面以shared pool为例,解释一下dump出来的内存结构。
SQL> conn sys/sys as sysdba Connected. SQL> oradebug setmypid Statement processed. SQL> oradebug dump heapdump 2 Statement processed. SQL>
以下时trace文件的内容,我们分别解释各个部分:
Dump file c:\oracle\product\10.2.0\admin\fuyuncat\udump\fuyuncat_ora_4032.trc Tue Jul 11 16:03:26 2006 ORACLE V10.2.0.1.0 - Production vsnsta=0 vsnsql=14 vsnxtr=3 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Windows XP Version V5.1 Service Pack 2 CPU : 2 - type 586 Process Affinity : 0x00000000 Memory (Avail/Total): Ph:885M/2039M, Ph+PgF:2702M/3890M, VA:1590M/2047M Instance name: fuyuncat Redo thread mounted by this instance: 1 Oracle process number: 18 Windows thread id: 4032, image: ORACLE.EXE (SHAD) *** SERVICE NAME:(SYS$USERS) 2006-07-11 16:03:26.322 *** SESSION ID:(159.7) 2006-07-11 16:03:26.322 这部分是关于trace文件的基本信息,oracle版本、资源情况、用户和会话等。
KGH Latch Directory Information ldir state: 2 next slot: 75 Slot [ 1] Latch: 03C3D280 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 2] Latch: 1EC9D4B0 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 3] Latch: 1EC9D540 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 4] Latch: 03C3E100 Index: 1 Flags: 3 State: 2 next: 00000001 Slot [ 5] Latch: 1ED65CE4 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 6] Latch: 1ED65F14 Index: 1 Flags: 3 State: 2 next: 00000000 ... ... 这部分记录的是shared pool中的latch信息。每个latch的具体信息可以通过视图V$LATCH、V$LATCH_PARENT、V$LATCH_CHILDREN或者表x$ksllt查出
****************************************************** HEAP DUMP heap name="sga heap" desc=03C38510 extent sz=0x32c8 alt=108 het=32767 rec=9 flg=-126 opc=0 parent=00000000 owner=00000000 nex=00000000 xsz=0x10 ****************************************************** 这是堆dump信息的头部,heap name说明了内存所述的堆,shared pool是属于SGA区的,因此,这里是"sga heap";
extent sz记录的是所有扩展段的大小。
HEAP DUMP heap name="sga heap(1,0)" desc=04EC131C extent sz=0xfc4 alt=108 het=32767 rec=9 flg=-126 opc=0 parent=00000000 owner=00000000 nex=00000000 xsz=0x400000 EXTENT 0 addr=1CC00000 Chunk 1cc00038 sz= 24 R-freeable "reserved stoppe" Chunk 1cc00050 sz= 212888 R-free " " Chunk 1cc33fe8 sz= 24 R-freeable "reserved stoppe" Chunk 1cc34000 sz= 3977544 perm "perm " alo=3977544 Chunk 1cfff148 sz= 3768 free " " EXTENT 1 addr=1D000000 Chunk 1d000038 sz= 24 R-freeable "reserved stoppe" Chunk 1d000050 sz= 212888 R-free " " Chunk 1d033fe8 sz= 24 R-freeable "reserved stoppe" Chunk 1d034000 sz= 2097168 perm "perm " alo=2097168 这部分信息是trace文件中的主要部分,它详细记录了shared pool中各个chunk的信息。
首先看它的头部信息,注意到这里heap name是"sga heap(1,0)"。这是什么意思呢?我们前面提到,oracle 10g会将shared pool分为几个区来管理,这里就是其中的一个区。共有4个区。通过表X$KGHLU可以看到对应的LRU链表。
EXTENT 0 addr=1CC00000 这一行说明下面的chunk都属于这个扩展段(extent),0是它的编号,addr是它的起始地址。
Chunk 1cc00038 sz= 24 R-freeable "reserved stoppe" 这是一个chunk的信息,sz是这个chunk的大小(24字节)。R-freeable是这个chunk的状态,"reserved stoppe"是这个chunk的用途。Chunk有4种可能状态,以下是这四种状态的含义:
free:即空闲chunk,可以随时分配给适合大小的请求;
freeable:这种状态的chunk表示它当前正在被使用,但是这种使用是短期的,比如在一次调用中或者一个会话中,会话或者调用解释就可以被释放出来。这种状态的chunk是不放在LRU链表中的,一旦使用结束,自动成为free状态,放到空闲列表中;
recreatable:这种状态的chunk正在被使用,但是它所包含的对象是可以被暂时移走、重建,比如解析过的语句。它是被LRU链表管理的。
permanent:顾名思义,这种状态的chunk所包含的对象是永远不会被释放的。即使flush shared pool也不会释放。
我们注意到,这里还有一些状态是有前缀“R-”的。带有这种前缀的chunk说明是shared pool中的保留区的chunk。
Total heap size = 41942480 最后是这一shared pool区的总的大小。
FREE LISTS: Bucket 0 size=16 Bucket 1 size=20 Chunk 166ed050 sz= 20 free " " Chunk 167de068 sz= 20 free " " Chunk 164b9c10 sz= 20 free " " Chunk 1f2776f8 sz= 20 free " " 接下来便是这个shared pool区的空闲列表。Bucket是一个空闲列表的范围,例如Bucket 1,它的最小值是上一个Bucket的最大值,即16,最大值为20。Bucket下面是空闲列表中chunk,后面的信息和前面解释chunk的信息一样,8位的16进制数字是它的地址;sz是chunk的大小;free是chunk的状态,因为是空闲列表中的chunk,这里只有一个状态;最后是chunk的用途,因为都是free,所以肯定为空。
Total free space = 1787936 最后是这块shared pool区中空闲chunk的总的大小。
RESERVED FREE LISTS: Reserved bucket 0 size=16 Reserved bucket 1 size=4400 Reserved bucket 2 size=8204 Reserved bucket 3 size=8460 Reserved bucket 4 size=8464 Reserved bucket 5 size=8468 Reserved bucket 6 size=8472 Reserved bucket 7 size=9296 Reserved bucket 8 size=9300 Reserved bucket 9 size=12320 Reserved bucket 10 size=12324 Reserved bucket 11 size=16396 Reserved bucket 12 size=32780 Reserved bucket 13 size=65548 Chunk 1b800050 sz= 212888 R-free " " Chunk 16c00050 sz= 212888 R-free " " Chunk 1ac00050 sz= 212888 R-free " " Total reserved free space = 638664 Shared pool的普通区的空闲列表下面就是关于这块shared pool区中保留区的空闲列表的描述,其中除了在名字上bucket前面都有一个Reserved标识,和状态前面有“R-”前缀外,含义和普通空闲列表相同。
UNPINNED RECREATABLE CHUNKS (lru first): Chunk 1aee99c0 sz= 4096 recreate "sql area " latch=1D8BDD48 Chunk 1ae4aeec sz= 4096 recreate "sql area " latch=1D8BDDB0 ... ... SEPARATOR Chunk 166e8384 sz= 540 recreate "KQR PO " latch=1DD7F138 Chunk 1f333a5c sz= 284 recreate "KQR PO " latch=1DC7DFC8 Chunk 166e9340 sz= 540 recreate "KQR PO " latch=1DE00A70 Chunk 1f0fe058 sz= 284 recreate "KQR PO " latch=1DC7DFC8 Chunk 1f2116b4 sz= 540 recreate "KQR PO " latch=1DE81910 Chunk 1f21127c sz= 540 recreate "KQR PO " latch=1DE81910 ... ... Unpinned space = 1611488 rcr=645 trn=864 空闲列表后面就是LRU链表了。LRU链表不是按照大小分的,因而没有Bucket。它的chunk是按照最近最少使用的顺序排列。其中chunk的信息和前面解释的一样。但是要注意一点,因为LRU链表中的chunk都是使用的,因为每个chunk根据用途不同,都会有一个latch来保护,Chunk信息最后便是latch的地址。
注意,我们前面提到,shared pool中是有两种LRU链表的,一种循环LRU链表;另外一种是暂时LRU链表。在这里LRU信息中前面部分是循环LRU链表,SEPARATOR后面部分是暂时LRU链表信息。
最后是LRU链表中chunk的总的大小,rcr是循环LRU链表中的chunk数,trn是暂时LRU链表中的chunk数。
此外,有一点提示,如果是有多个shared pool区,第一个区是不含LRU链表信息的。
PERMANENT CHUNKS: Chunk 1d234010 sz= 1884144 perm "perm " alo=1728440 Chunk 1cc34000 sz= 3977544 perm "perm " alo=3977544 Chunk 1d034000 sz= 2097168 perm "perm " alo=2097168 Chunk 1d434000 sz= 3117112 perm "perm " alo=3117112 ... ... Chunk 1f434000 sz= 3917704 perm "perm " alo=3917704 Permanent space = 38937696 最后是永久chunk的信息。Chunk部分解释和前面一致。alo表示已经分配的大小。
如果有多个shared pool区,永久chunk信息则只存在于第一个shared pool区。
by fuyuncat
下面以shared pool为例,解释一下dump出来的内存结构。
SQL> conn sys/sys as sysdba Connected. SQL> oradebug setmypid Statement processed. SQL> oradebug dump heapdump 2 Statement processed. SQL>
以下时trace文件的内容,我们分别解释各个部分:
Dump file c:\oracle\product\10.2.0\admin\fuyuncat\udump\fuyuncat_ora_4032.trc Tue Jul 11 16:03:26 2006 ORACLE V10.2.0.1.0 - Production vsnsta=0 vsnsql=14 vsnxtr=3 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Windows XP Version V5.1 Service Pack 2 CPU : 2 - type 586 Process Affinity : 0x00000000 Memory (Avail/Total): Ph:885M/2039M, Ph+PgF:2702M/3890M, VA:1590M/2047M Instance name: fuyuncat Redo thread mounted by this instance: 1 Oracle process number: 18 Windows thread id: 4032, image: ORACLE.EXE (SHAD) *** SERVICE NAME:(SYS$USERS) 2006-07-11 16:03:26.322 *** SESSION ID:(159.7) 2006-07-11 16:03:26.322 这部分是关于trace文件的基本信息,oracle版本、资源情况、用户和会话等。
KGH Latch Directory Information ldir state: 2 next slot: 75 Slot [ 1] Latch: 03C3D280 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 2] Latch: 1EC9D4B0 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 3] Latch: 1EC9D540 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 4] Latch: 03C3E100 Index: 1 Flags: 3 State: 2 next: 00000001 Slot [ 5] Latch: 1ED65CE4 Index: 1 Flags: 3 State: 2 next: 00000000 Slot [ 6] Latch: 1ED65F14 Index: 1 Flags: 3 State: 2 next: 00000000 ... ... 这部分记录的是shared pool中的latch信息。每个latch的具体信息可以通过视图V$LATCH、V$LATCH_PARENT、V$LATCH_CHILDREN或者表x$ksllt查出
****************************************************** HEAP DUMP heap name="sga heap" desc=03C38510 extent sz=0x32c8 alt=108 het=32767 rec=9 flg=-126 opc=0 parent=00000000 owner=00000000 nex=00000000 xsz=0x10 ****************************************************** 这是堆dump信息的头部,heap name说明了内存所述的堆,shared pool是属于SGA区的,因此,这里是"sga heap";
extent sz记录的是所有扩展段的大小。
HEAP DUMP heap name="sga heap(1,0)" desc=04EC131C extent sz=0xfc4 alt=108 het=32767 rec=9 flg=-126 opc=0 parent=00000000 owner=00000000 nex=00000000 xsz=0x400000 EXTENT 0 addr=1CC00000 Chunk 1cc00038 sz= 24 R-freeable "reserved stoppe" Chunk 1cc00050 sz= 212888 R-free " " Chunk 1cc33fe8 sz= 24 R-freeable "reserved stoppe" Chunk 1cc34000 sz= 3977544 perm "perm " alo=3977544 Chunk 1cfff148 sz= 3768 free " " EXTENT 1 addr=1D000000 Chunk 1d000038 sz= 24 R-freeable "reserved stoppe" Chunk 1d000050 sz= 212888 R-free " " Chunk 1d033fe8 sz= 24 R-freeable "reserved stoppe" Chunk 1d034000 sz= 2097168 perm "perm " alo=2097168 这部分信息是trace文件中的主要部分,它详细记录了shared pool中各个chunk的信息。
首先看它的头部信息,注意到这里heap name是"sga heap(1,0)"。这是什么意思呢?我们前面提到,oracle 10g会将shared pool分为几个区来管理,这里就是其中的一个区。共有4个区。通过表X$KGHLU可以看到对应的LRU链表。
EXTENT 0 addr=1CC00000 这一行说明下面的chunk都属于这个扩展段(extent),0是它的编号,addr是它的起始地址。
Chunk 1cc00038 sz= 24 R-freeable "reserved stoppe" 这是一个chunk的信息,sz是这个chunk的大小(24字节)。R-freeable是这个chunk的状态,"reserved stoppe"是这个chunk的用途。Chunk有4种可能状态,以下是这四种状态的含义:
free:即空闲chunk,可以随时分配给适合大小的请求;
freeable:这种状态的chunk表示它当前正在被使用,但是这种使用是短期的,比如在一次调用中或者一个会话中,会话或者调用解释就可以被释放出来。这种状态的chunk是不放在LRU链表中的,一旦使用结束,自动成为free状态,放到空闲列表中;
recreatable:这种状态的chunk正在被使用,但是它所包含的对象是可以被暂时移走、重建,比如解析过的语句。它是被LRU链表管理的。
permanent:顾名思义,这种状态的chunk所包含的对象是永远不会被释放的。即使flush shared pool也不会释放。
我们注意到,这里还有一些状态是有前缀“R-”的。带有这种前缀的chunk说明是shared pool中的保留区的chunk。
Total heap size = 41942480 最后是这一shared pool区的总的大小。
FREE LISTS: Bucket 0 size=16 Bucket 1 size=20 Chunk 166ed050 sz= 20 free " " Chunk 167de068 sz= 20 free " " Chunk 164b9c10 sz= 20 free " " Chunk 1f2776f8 sz= 20 free " " 接下来便是这个shared pool区的空闲列表。Bucket是一个空闲列表的范围,例如Bucket 1,它的最小值是上一个Bucket的最大值,即16,最大值为20。Bucket下面是空闲列表中chunk,后面的信息和前面解释chunk的信息一样,8位的16进制数字是它的地址;sz是chunk的大小;free是chunk的状态,因为是空闲列表中的chunk,这里只有一个状态;最后是chunk的用途,因为都是free,所以肯定为空。
Total free space = 1787936 最后是这块shared pool区中空闲chunk的总的大小。
RESERVED FREE LISTS: Reserved bucket 0 size=16 Reserved bucket 1 size=4400 Reserved bucket 2 size=8204 Reserved bucket 3 size=8460 Reserved bucket 4 size=8464 Reserved bucket 5 size=8468 Reserved bucket 6 size=8472 Reserved bucket 7 size=9296 Reserved bucket 8 size=9300 Reserved bucket 9 size=12320 Reserved bucket 10 size=12324 Reserved bucket 11 size=16396 Reserved bucket 12 size=32780 Reserved bucket 13 size=65548 Chunk 1b800050 sz= 212888 R-free " " Chunk 16c00050 sz= 212888 R-free " " Chunk 1ac00050 sz= 212888 R-free " " Total reserved free space = 638664 Shared pool的普通区的空闲列表下面就是关于这块shared pool区中保留区的空闲列表的描述,其中除了在名字上bucket前面都有一个Reserved标识,和状态前面有“R-”前缀外,含义和普通空闲列表相同。
UNPINNED RECREATABLE CHUNKS (lru first): Chunk 1aee99c0 sz= 4096 recreate "sql area " latch=1D8BDD48 Chunk 1ae4aeec sz= 4096 recreate "sql area " latch=1D8BDDB0 ... ... SEPARATOR Chunk 166e8384 sz= 540 recreate "KQR PO " latch=1DD7F138 Chunk 1f333a5c sz= 284 recreate "KQR PO " latch=1DC7DFC8 Chunk 166e9340 sz= 540 recreate "KQR PO " latch=1DE00A70 Chunk 1f0fe058 sz= 284 recreate "KQR PO " latch=1DC7DFC8 Chunk 1f2116b4 sz= 540 recreate "KQR PO " latch=1DE81910 Chunk 1f21127c sz= 540 recreate "KQR PO " latch=1DE81910 ... ... Unpinned space = 1611488 rcr=645 trn=864 空闲列表后面就是LRU链表了。LRU链表不是按照大小分的,因而没有Bucket。它的chunk是按照最近最少使用的顺序排列。其中chunk的信息和前面解释的一样。但是要注意一点,因为LRU链表中的chunk都是使用的,因为每个chunk根据用途不同,都会有一个latch来保护,Chunk信息最后便是latch的地址。
注意,我们前面提到,shared pool中是有两种LRU链表的,一种循环LRU链表;另外一种是暂时LRU链表。在这里LRU信息中前面部分是循环LRU链表,SEPARATOR后面部分是暂时LRU链表信息。
最后是LRU链表中chunk的总的大小,rcr是循环LRU链表中的chunk数,trn是暂时LRU链表中的chunk数。
此外,有一点提示,如果是有多个shared pool区,第一个区是不含LRU链表信息的。
PERMANENT CHUNKS: Chunk 1d234010 sz= 1884144 perm "perm " alo=1728440 Chunk 1cc34000 sz= 3977544 perm "perm " alo=3977544 Chunk 1d034000 sz= 2097168 perm "perm " alo=2097168 Chunk 1d434000 sz= 3117112 perm "perm " alo=3117112 ... ... Chunk 1f434000 sz= 3917704 perm "perm " alo=3917704 Permanent space = 38937696 最后是永久chunk的信息。Chunk部分解释和前面一致。alo表示已经分配的大小。
如果有多个shared pool区,永久chunk信息则只存在于第一个shared pool区。
by fuyuncat
Oracle内存全面分析(12)[HelloDBA.COM]
Oracle内存全面分析(10)[HelloDBA.COM]
Oracle内存全面分析(11)[HelloDBA.COM]
Oracle内存全面分析(11)[HelloDBA.COM]
Oracle内存全面分析(11)[HelloDBA.COM]
Oracle内存全面分析(10)[HelloDBA.COM]
Oracle内存全面分析(5
五一全面分析51.com
Oracle中用LogMiner分析重做及归档日志2-xxlinux.com
Oracle分析函数参考手册
深入分析Oracle字符集
Oracle分析函数的使用
12 星座最全面~精确的分析
12 星座最全面精确的分析
Oracle内存结构研究-SGA篇-Oracle认证考试-考试大
专家分析Oracle-Hyperion并购事件
七步详细分析Oracle表空间
健康全面分析
全面解析Oracle认证及如何准备考试
全面解析Oracle数据库中管理实例的方法
故障之首:内存故障分析大全
第一章 Oracle介绍12
扔掉菜鸟的标签 全面认识内存技术参数
对oracle实例的内存(SGA和PGA)进行调整,优化数据库性 -