`
mikixiyou
  • 浏览: 1099005 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353158
社区版块
存档分类
最新评论

shared pool的物理结构和逻辑结构

阅读更多

从物理角度上看Oracle shared pool ,它是由多个内存块组成。这里的内存块相当于数据文件中的数据块,是最小的分配单位。这个最小分配单位称为chunk ,它里面的内存字节是连续的。但每个chunk 的大小是不固定的。

shared pool 的内存分配由heap (堆)来实现。heap 的个数由隐含参数”_kghdsidx_count “ 来决定。

每个heap 下又有多个sub-heap ,他们之间的关系称为高级堆和副堆。他们的结构大致相同。

heap 由一个或多个extentheap header 组成,而extent 又由若干个chunkextent header 组成,而chunkchunk headerchunk body 组成。

每个extent 的体积是若干个granule (有文档说是一个,但dump 出来看不只一个)。granuleshared pool 逻辑角度上的组成单位。这个granule 是固定值,不同的SGA 下大小不同,如10gSGA_MAX_SIZE<=1024MB ,则granule  的值为4MB  SGA_MAX_SIZE>1024MB  ,则granule  的值为16MB 。可以通过v$sgainfo 去查证。

从视图 select   ksmchcls, count (*)  from   x$ksmsp  group   by   ksmchcls; 中可以看到shared pool 的每个chunk 的类型。

KSMCHCLS

COUNT(*)

free

3299

freeabl

13634

no acce

17

perm

43

R-free

31

R-freea

76

recr

18519

 

free :这种类型的 chunk 不包含有效的对象,可以不受限制地被分配。

recr :意味着 recreatable ,这种类型的 chunk 里包含的对象可以在需要的时候被临时移走,并且在需要的时候重新创建。比如对于很多有关共享 SQL 语句的 chunk 就是 recreatable 的。

freeabl :这种类型的 chunk 包含的对象都是曾经被 session 使用过的,并且随后会被完全或部分释放。这种类型的 chunk 不能临时从内存移走,因为它们是在处理过程中间产生的,如果移走的话就无法被重建。

perm :意味着 permanent ,这种类型的 chunk 包含永久的对象,大型的 permanent 类型的 chunk 也可能含有可用空间,这部分可用空间可以在需要的时候释放回 shared pool 里。

 

(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1667933 )

 

使用”heapdump at level 2”shared pool 空间dump 出来,可以看到heap 的组成。

使用的SQL 如下:

alter session set events 'immediate trace name heapdump level 2';

dump 出来的结果如下:

******************************************************

HEAP DUMP heap name="sga heap"   desc=0x2000002c

 extent sz=0x32c8 alt=108 het=32767 rec=9 flg=-126 opc=0

 parent=(nil) owner=(nil) nex=(nil) xsz=0x0

******************************************************

HEAP DUMP heap name="sga heap(1,1)"   desc=0x2001b598

 extent sz=0xfc4 alt=108 het=32767 rec=9 flg=-126 opc=0

 parent=(nil) owner=(nil) nex=(nil) xsz=0x1000000

EXTENT 0 addr=0x9d000000

   Chunk 9d000038 sz=        24   R-freeable   "reserved stoppe"

   Chunk 9d000050 sz=    839576   R-free       "                "

  Chunk 9d0ccfe8 sz=        24   R-freeable   "reserved stoppe"

   Chunk 9d0cd000 sz= 10274952     free       "                "

   Chunk 9da99888 sz=       796     recreate   "KGL handles     "   latch=(nil)

   Chunk 9da99ba4 sz=      1036     freeable   "parameter table"

   Chunk 9da99fb0 sz=        96     freeable   "library cache   "

   Chunk 9da9a010 sz=       228     recreate   "KGL handles     "   latch=(nil)

   Chunk 9da9a0f4 sz=        96     freeable   "library cache   "

   Chunk 9da9a154 sz=       284     recreate   "KQR PO          "   latch=0x9baaf310

   Chunk 9da9a270 sz=       284     recreate   "KQR PO          "   latch=0x9baaf310

   Chunk 9da9a38c sz=       540     recreate   "KQR PO          "   latch=0x9baaf568

   Chunk 9da9a5a8 sz=        96     freeable   "library cache   "

   Chunk 9da9a608 sz=       540     recreate   "KGL handles     "   latch=(nil)

   Chunk 9da9a824 sz=       540     recreate   "KGL handles     "   latch=(nil)

   Chunk 9da9aa40 sz=       540     recreate   "KGL handles     "   latch=(nil)

   Chunk 9da9ac5c sz=       540     recreate   "KGL handles     "   latch=(nil)

   Chunk 9da9ae78 sz=       540     recreate   "KGL handles     "   latch=(nil) 
 

 

chunk  header 中,有一个16 字节的固定区域,保存分配该heap 内存的原因或者说是注释,如”KGL handles””KQR PO” 等等。

Oracle shared pool 中这些物理内存的分配、管理都是由一个叫做KGH Heap ManagerC 程序来实现的。Heap Manager 预先分配所有的shared pool 所定义的内存空间。Heap Manager 还管理PGA 内存,但这个操作需要经常同操作系统交互来分配和回收内存。

 

从逻辑角度看Oracle shared pool ,它主要分为library cachedictionary cachecontrol structure 三个部分。

Shared pool library cache 主要保存了已执行的SQL 语句和PL/SQL 对象,以及它们的执行计划等等。

采用hash table 对这些对象进行管理。例如一个SQL 在经过hash 算法分析后得到一个hash 值。hash table 下由若干个hash buckethash bucket 下又有若干个library cache handle 组成。这些handle 的组成部分包括name,namespace,lock owners,lock waiters,pin owners,pin waiters,flags,heap 0(object) 。其中heap 0 保存的是指向object 的指针。因此这个heap 0 也称为object 。如下图所示:


 

根据library cache 的结构,延伸到heap 0 这个级别上。heap 0 的组成部分包括object type,object name,flags,tables,data blocks 。其中tablesdata blocks 又进一步延伸。

tables 的组成部分包括dependency tablechild tabletranslation tableauthorization tableaccess tabler-o dependency tableschema name table

data blocks 的组成部分包括object, source,diana,pcode,mcode,errors,sql context 。其中source 也称为heap 1 用于存储sql 文本,sql context 称为heap 6 用于存储SQL 执行计划。如下图所示:

 

 

library cache 中不同bucketlibrary cache object handle 是有不同类型的。可以根据object handle 中的namespace 进行区别。不同object handle 之间可能采用双向链表的形式相互关联。

namespaceCRSR 的,有parent cursorchild cursor ,分别在不同的bucket 中的object handle 里。

使用”library_cache level 11 “将library cache 的内存dump 出来。

使用的SQL 如下:

 alter session set events 'immediate trace name library_cache level 11';

dump 出来的结果如下:

BUCKET 5944:

   LIBRARY OBJECT HANDLE:   handle=1895899e8 mtx=0x189589b18(1) cdp=1

   name=select* from sys.obj$ where obj#=:x

   hash=8cd0bd4dbb09ea7c3d007f1ce9b01738 timestamp=08-21-2012 10:02:35

   namespace= CRSR  flags=RON/KGHP/TIM/PN0/SML/KST/DBN/MTX/[120100d0]

   kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=6 hpc=0002 hlc=0002

   lwt=0x189589a90[0x189589a90,0x189589a90] ltm=0x189589aa0[0x189589aa0,0x189589aa0]

   pwt=0x189589a58[0x189589a58,0x189589a58] ptm=0x189589a68[0x189589a68,0x189589a68]

   ref=0x189589ac0[0x189589ac0,0x189589ac0] lnd=0x189589ad8[0x189589ad8,0x189589ad8]

     LOCK OWNERS:

         lock      user   session count mode flags

     -------- -------- -------- ----- ---- ------------------------

     17f72e938 1852c9890 1852c9890      1 N     [00]

     LIBRARY OBJECT: object=1786e6168

     type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0

     CHILDREN: size=16

     child#     table reference    handle

     ------ -------- --------- --------

          0 17816fa10 17816f680 144768330

     DATA BLOCKS:

     data#      heap   pointer     status pins change whr

     ----- -------- -------- --------- ---- ------ ---

         0 144773248 1786e6280 I/P/A/-/-     0 NONE    00

   BUCKET 5944 total object count=1
   

 

 

 

 

LIBRARY OBJECT HANDLE: handle=144768330 mtx=0x144768460(0) cdp=0

   namespace=CRSR flags=RON/KGHP/PN0/EXP/[10010100]

   kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=6 hpc=fffe hlc=fffe

   lwt=0x1447683d8[0x1447683d8,0x1447683d8] ltm=0x1447683e8[0x1447683e8,0x1447683e8]

   pwt=0x1447683a0[0x1447683a0,0x1447683a0] ptm=0x1447683b0[0x1447683b0,0x1447683b0]

   ref=0x144768408[0x17816f680,0x17816f680] lnd=0x144768420[0x144768420,0x144768420]

     CHILD REFERENCES:

     reference latch flags

     --------- ----- -------------------

     17816f680     11 CHL[02]

     LOCK OWNERS:

         lock      user   session count mode flags

     -------- -------- -------- ----- ---- ------------------------

     17f72f1d8 1852c9890 1852c9890      1 N     [00]

     LIBRARY OBJECT: object=178161a10

     type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0

     DEPENDENCIES: count=1 size=16

     dependency#     table reference    handle position flags

     ----------- -------- --------- -------- -------- -------------------

               0 17837dae8 17837d828 189addbb8        17 DEP[01]

     AUTHORIZATIONS: count=1 size=16 minimum entrysize=16

     00000000 00000000 00020000 00000000

     ACCESSES: count=1 size=16

     dependency# types

     ----------- -----

               0 0009

     SCHEMA: count=1 size=262144

     00000000

     DATA BLOCKS:

     data#      heap   pointer     status pins change whr

     ----- -------- -------- --------- ---- ------ ---

         0 144e55298 178161b28 I/P/A/-/-     0 NONE    00

         6 1786cd5a0 16ece5dc0 I/-/A/-/E     0 NONE    00
分享到:
评论
2 楼 mikixiyou 2012-10-08  
focus2008 写道
对shared pool很牛逼的分析!看来是曲高和寡啊,这么好的文章一个顶的人都没有。

有个问题想问一下博主:KGL handles, KGLS heap中的 KGL是什么含义。是那三个单词的缩写。搜索了好久也没有弄明白。

Kernel Generic Library,我猜测是这三个单词的首写字母。
1 楼 focus2008 2012-09-28  
对shared pool很牛逼的分析!看来是曲高和寡啊,这么好的文章一个顶的人都没有。

有个问题想问一下博主:KGL handles, KGLS heap中的 KGL是什么含义。是那三个单词的缩写。搜索了好久也没有弄明白。

相关推荐

    计算机软件及应用Sharedpool深入分析及性能调整PPT学习教案.pptx

    在内存结构上,Sharedpool可以逻辑地分为Library Cache和Dictionary Cache两部分,它们之间有紧密的交互。当SQL语句进入Library Cache时,Oracle会查找Dictionary Cache中的相关数据字典信息。若找不到所需信息,...

    ORACLE数据库入门1.ppt

    ORACLE数据库的体系结构主要包括物理结构和逻辑结构。物理结构包括数据文件、redo log files、控制文件和参数文件等。数据文件用于存储实际数据,redo log files用于记录所有的数据库操作,控制文件用于记录数据库的...

    oracle数据库管理体系结构.ppt

    Oracle数据库管理体系结构是指Oracle数据库的逻辑和物理结构,它包括数据库的存储结构、进程结构、内存结构等方面。 Oracle数据库管理体系结构是Oracle数据库的核心组件,负责管理和维护数据库的所有资源和数据。 ...

    Oracle10g体系结构.pptx

    - **物理存储**:实际存在于磁盘上的文件,包括数据文件(存储数据)、控制文件(记录数据库的物理结构和状态)、重做日志文件(记录事务日志)以及参数文件(存储数据库配置信息)。 4. **DBA职责**: - 安装和...

    第二章 Oracle体系结构.pptx

    Oracle数据库的体系结构是其高效运行的基础,涵盖了物理结构、逻辑结构、内存结构、数据库实例与进程以及数据字典等多个方面。本章主要探讨的是Oracle 9i数据库的物理结构,包括数据文件、日志文件、控制文件和配置...

    oracle体系结构

    Oracle数据库的体系结构是其高效稳定运行的基础,涵盖了物理结构、逻辑结构、内存结构和存储结构等多个方面。首先,我们来详细探讨这些概念。 **物理结构**是指Oracle数据库在操作系统层面的实际存在形式,主要包括...

    【Oracle体系结构】-(个人研读整理).docx

    Oracle数据库的物理结构由一系列的文件组成,包括: 1. 数据文件:存储数据库的数据,扩展名为.dbf,每个表空间可以包含多个数据文件,但一个数据文件只能属于一个表空间。 2. 控制文件:记录数据库的元数据,如...

    Oracle数据库系统应用开发实用教程电子课件 第2章 Oracle体系结构.ppt

    - 内存结构:主要包括共享池(Shared Pool)、数据缓冲区(Buffer Cache)、日志缓冲区(Redo Buffer)等,这些区域用于存储数据和SQL语句等信息。 - 后台进程:如PMON(Process Monitor)、SMON(System Monitor...

    oracle dataguard 逻辑standby建立

    5. **创建初始化参数文件**:在物理 Standby 数据库上创建初始化参数文件,并对其中的一些参数进行修改,如 LOG_ARCHIVE_DEST、PARALLEL_MAX_SERVERS、SHARED_POOL_SIZE 等。 ##### 2.4 关闭物理 Standby 数据库并...

    基于Linux的Oracle Data Guard数据容灾系统.pdf

    物理standby数据库保持与主数据库的物理结构一致,实时接收并应用主数据库的redo信息。逻辑standby则先将redo信息转换为SQL语句再应用,适合处理复杂的数据转换和格式调整。 在论文中,作者详细探讨了如何在Linux...

    Oracle12c 结构体系

    4. 物理和逻辑备份与恢复:在Oracle 12c中,通过RMAN(Recovery Manager)进行数据的备份和恢复。 5. Data Guard:提供高可用性解决方案,允许创建一个或多个备用数据库,可进行自动故障转移和灾难恢复。 6. 性能...

    Oracle数据库整体架构及启停介绍.pptx

    首先,数据库的整体架构包括物理结构和逻辑结构两部分。物理结构指的是在磁盘上实际存储的数据文件、控制文件、重做日志文件等,这些文件是数据库的基础,包含了数据库的所有数据和元数据。逻辑结构则是指表、索引、...

    oracle 体系结构

    - **共享池(Shared Pool)**:存储最近执行的SQL语句和数据字典数据,有助于减少重复加载和解析SQL语句的时间。 - **数据库高速缓冲区(Database Buffer Cache)**:用于缓存最近使用的数据,从而提高数据检索速度。 ...

    Oracle数据库体系结构-学习笔记.docx

    - **Controlfile**: 记录数据库的物理结构的关键信息。 - **Redolog Files**: 用于记录事务操作的日志文件,对于数据库的恢复至关重要。 - **Instance**: 实例是一个数据库在内存中的表现形式,它由系统全局区...

    oracle 体系结构.doc

    1. **共享池(Shared Pool)**:这是SGA中最重要的部分,用于存储解析后的SQL语句和PL/SQL代码。当SQL语句首次执行时,Oracle会对其进行解析并将其结果保存在共享池的Library Cache中。之后再次执行相同SQL时,Oracle...

    09-10-2 第03讲补充 Oracle体系结构--SGAx.pptx

    在讲解Oracle 10g数据库结构时,我们重点关注四个关键部分:物理存储结构、逻辑存储结构、内存结构和数据库实例与进程。 2.1 物理存储结构 Oracle数据库的物理存储主要涉及数据文件(Data Files)、控制文件...

    老相Oracle DBA学习笔记

    Oracle数据库管理员(DBA)学习笔记详细记录了Oracle数据库中SQL语句执行的过程,包括用户连接、服务器进程分配、PGA空间、SQL解析、执行计划缓存、shared pool、buffer cache、逻辑IO和物理IO、重做日志等关键知识...

    oracle的备份与恢复方案[借鉴].pdf

    本文将深入探讨Oracle数据库的启动与关闭、内存体系结构、数据库的物理结构以及与备份和恢复相关的数据库文件。 首先,数据库的启动与关闭涉及多个阶段。在未加载(nomount)状态下,Oracle实例仅仅启动,读取参数...

Global site tag (gtag.js) - Google Analytics