• shared pool dump详解


    下面以shared pool为例,解释一下dump出来的内存结构。

    SQL> conn sys/sys as sysdba
    Connected.
    SQL> oradebug setmypid
    Statement processed.
    SQL>  oradebug dump heapdump 2
    Statement processed.

    以下时trace文件的内容,我们分别解释各个部分:

    Dump file c:oracleproduct10.2.0adminfuyuncatudumpfuyuncat_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区。

    subpool中chunk状态为R-free的都是从保留池分配的内存

    以下摘自我dump后sga heap(1,0)中chunk列表

    Chunk 7000101f0000090 sz= 6291264 R-free " "
    Chunk 700010228000090 sz= 6713152 R-free " "
    Chunk 700010278000100 sz= 6713040 R-free " "

    这个是reserved  free 列表,可以发现 下边R-free状态的chunk一一对应

    RESERVED FREE LISTS:
    Reserved bucket 0 size=40
    Reserved bucket 1 size=4400
    Reserved bucket 2 size=8216
    Reserved bucket 3 size=8752
    Reserved bucket 4 size=8760
    Reserved bucket 5 size=8768
    Reserved bucket 6 size=8776
    Reserved bucket 7 size=9384
    Reserved bucket 8 size=9392
    Reserved bucket 9 size=12368
    Reserved bucket 10 size=12376
    Reserved bucket 11 size=16408
    Reserved bucket 12 size=32792
    Reserved bucket 13 size=65560
    Chunk 700010228000090 sz= 6713152 R-free " "
    Chunk 700010278000100 sz= 6713040 R-free " "
    Reserved bucket 14 size=63752200
    Total of this reserved free space = 13426192
    RESERVED FREE LISTS FOR SIZES 64KB to 512KB:
    Reserved bucket 0 size=40
    Reserved bucket 1 size=65536
    Reserved bucket 2 size=2147483647
    Total of this reserved free space = 0
    RESERVED FREE LISTS FOR SIZES 512KB to 976KB:
    Reserved bucket 0 size=40
    Reserved bucket 1 size=524288
    Reserved bucket 2 size=2147483647
    Total of this reserved free space = 0
    RESERVED FREE LISTS FOR SIZES OVER 976KB:
    Reserved bucket 0 size=40
    Reserved bucket 1 size=999424
    Chunk 7000101f0000090 sz= 6291264 R-free " "
    Reserved bucket 2 size=2147483647
    Total of this reserved free space = 6291264
    Total of all reserved free space = 19717456

    流年笑掷 未来可期
  • 相关阅读:
    percona-toolkit
    美河在线
    http://planet.mysql.com/
    MySQL性能诊断与调优 转
    PDB CDB
    mysql安装三 linux源码安装mysql5.6.22
    Solaris10 下mysql5.5.12的安装
    c# 进程间通信
    C# 进程同步,通信
    有关DotNetBar设计样式和运行时的样式不一致的问题
  • 原文地址:https://www.cnblogs.com/nadian-li/p/12849366.html
Copyright © 2020-2023  润新知