共享内存 share pool (2):BUCKET /FREE LISTS /RESERVED FREE LISTS /UNPINNED RECREATABLE CHUNKS (lru first)
相关概念
- BUCKET :每个bucket上挂有一个 chunk list。同一个BUCKET中的chunk在物理地址上是不一定相邻的
- FREE LISTS:按bucket划分,共有255个,bucket 0---bucket 254
- RESERVED FREE LISTS:在SQL语句所需CHUNK大于4400bytes时,会在RESERVED FREE LISTS中查找空闲CHUNK。如果SQL语句所需CHUNK不大于4400bytes时,只会在free list 中查找CHUNK。
Shared pool中chunk的分配过程
- 当需要从shared pool中寻找chunk的时候,首先会定位一个bucket,然后遍历bucket,寻找最合适的chunk.如果chunk的空间比需要的空间大,那么这个chunk就拆分成两个,一个被分配、一个成为free,重新挂接到相应大小的bucket上。
- 在寻找chunk的过程中,如果一个bucket中没有合适的chunk,接着寻找另外一个非空的bucket,如果所有的bucket中都没有合适的chunk,那么就从rec类型的链表中释放一部分的空间,为free,或将free做适当合并。注意:只有rec类型的chunk能够被释放空间,即使释放了空间,这些空间可能都不是连续的,都是一些很小的chunk,这样可能形成这样一种情况,shared pool中有空间但是是大量的非常小的chunk,这样在寻找chunk的时候,也很难寻找到合适的chunk--共享池碎片
接着上一篇,继续解析dump文件
******************************************************
FREE LISTS:
Bucket 0 size=16
Bucket 1 size=20
Bucket 2 size=24
Bucket 3 size=28
Chunk 363fffe4 sz= 28 free " "
Bucket 4 size=32
.......
Bucket 98 size=408
Bucket 99 size=412
Chunk 36bffe64 sz= 412 free " "
Chunk 387ffe64 sz= 412 free " "
.......
Bucket 100 size=416
Bucket 251 size=12324
Bucket 252 size=16396
Bucket 253 size=32780
Bucket 254 size=65548
Total free space = 5432 Bucket 不存在地址标识( EXTENT有地址标识 ),说明Bucket只是一个逻辑概念。
Bucket 3,它的chunk最小值是上一个Bucket中chunk的最大值,即28,最大值为28 每个Bucket容纳的size范围:
Bucket 0~199 容纳size以 4 递增
Bucket 200~249 容纳size以 64 递增 从Bucket 249开始,Oracle各Bucket步长进一步增加: Bucket 249: 4012 ~4107 = 96
Bucket 250: 4108 ~8203 = 4096
Bucket 251: 8204 ~16395 = 8192
Bucket 252: 16396~32779 = 16384
Bucket 253: 32780~65547 = 32768
Bucket 254: >=65548
****************************************************** RESERVED FREE LISTS:
Reserved bucket 0 size=16
Chunk 37bffbe0 sz= 1032 R-free " "
Reserved bucket 1 size=4400
Reserved bucket 2 size=8204
Chunk 36ffdf78 sz= 8304 R-free " "
Reserved bucket 3 size=8460
Reserved bucket 4 size=8464
......
Reserved bucket 14 size=1990630
Total reserved free space = 3204600 Shared pool的普通区的空闲列表下面就是关于这块shared pool区中保留区的空闲列表的描述,其中除了在名字上bucket前面都有一个Reserved标识,和状态前面有“R-”前缀外,含义和普通空闲列表相同。
******************************************************
空闲列表后面就是LRU链表了。LRU链上挂的都是recreate、freeabl状态的chunk.一个SQL语句可能需要多个CHUNK,在LRU链上找到recreate状态的chunk,然后在recreate状态的chunk下再下挂freeabl状态的CHUNK,这样避免全部CHUNK在LRU链上导致LRU链太长
UNPINNED RECREATABLE CHUNKS (lru first):
Chunk 246c9848 sz= 348 recreate "KGLHD " latch=(nil)
Chunk 237cb10c sz= 4096 recreate "KGLH0^b9197c6e " latch=(nil)
Chunk 24bb5df0 sz= 364 recreate "KGLHD " latch=(nil)
Chunk 241aa1b8 sz= 4096 recreate "KGLH0^59449e50 " latch=(nil)
Chunk 252640a0 sz= 364 recreate "KGLHD " latch=(nil)
Chunk 23a619a0 sz= 4096 recreate "KGLH0^d5f1e0d7 " latch=(nil)
Chunk 23465600 sz= 348 recreate "KGLHD " latch=(nil)
Chunk 2346575c sz= 1036 recreate "KGLHD " latch=(nil)
Chunk 23465b68 sz= 4096 recreate "KGLH0^c6e0d102 " latch=(nil) --- 一个recreate状态CHUNK下的多个freeable状态CHUNK
ds 24bdecb0 sz= 4096 ct= 1
Chunk 23466b68 sz= 4096 freeable "SQLA^1536bb77 " ds=0x23db5bd8
Chunk 23467b68 sz= 144 freeable "KGLDA "
Chunk 23467bf8 sz= 4096 freeable "KGLH0^ba3f9b05 " ds=0x2425e238 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数 ******************************************************
参考blog:
http://blog.csdn.net/haibusuanyun/article/details/17804395
http://www.hellodba.com/reader.php?ID=111&lang=CN
共享内存 share pool (2):BUCKET /FREE LISTS /RESERVED FREE LISTS /UNPINNED RECREATABLE CHUNKS (lru first)的更多相关文章
- 共享内存 share pool (1):heap /extent /chunk/
相关概念 CHUNK: Shared pool物理层面上由许多内存块组成,这些内在块称为chunk.但是chunk是大小不一的,在内存中一个chunk是连续的. EXTENT:由多个连续的chunk组 ...
- 共享内存shared pool (3):Library cache
Shared pool物理层面上由许多内存块(chunck)组成.从逻辑功能划分,Shared pool主要由三部分组成:Library cache,Dictionary cache和Control ...
- 共享内存shared pool (6):追踪sql语句
构建实验数据 --使用NC50用户查询(会话1) SQL> conn NC50/NC50 Connected. SQL> create table emp as select * from ...
- 共享内存shared pool (5):详解一条SQL在library cache中解析
前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...
- 共享内存shared pool (4):Library cache 转储文件
上一篇blog只是从概念上理解Library cache,本篇则是将Library cache从内存中dump出来,看看其结构. 基本命令 ALTER SESSION SET EVENTS 'imme ...
- ORA-04031: 无法分配 共享内存
今天现场项目oracle系统定时器插入数据报错: --ORA-04031: 无法分配 3936 字节的共享内存 ("shared pool","truncate tabl ...
- 关于linux 共享内存查看已经完整释放
完整删除共享内存脚本 #!/bin/sh function rmshm() { zero_status=`ipcs -m|awk '{print $6}'|grep -w 0|wc -l` if [ ...
- oracle 共享池( shared pool )
Oracle共享池 Oracle共享池(Share Pool)属于SGA,由库高速缓存(library cache)和数据字典高速缓存(data dictionary cache)组成. 库高速缓存 ...
- tuning 03 Sizing the Share pool
share pool : (组成) library cache: stores shared sql and pl/sql code (包含 statement text, parsed code, ...
随机推荐
- 列出当前ARM开发板系统加载的模块
lsmod 列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,第三列则是使用该模块的对象数目
- Redis集群功能概述
在单机Redis中介绍过Redis的复制特性以及Redis Sentinel和twemproxy,其中: 复制:可以创建指定服务器的复制品,这些复制品可以用户扩展系统处理读请求的能力: Redis S ...
- HDU 4292 Food
Food Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Grunt 之通配符
在描述源码路径的时候,经常有一些特殊的奇怪的要求.Grunt 通过内建的 node-glob 和 minimatch 库提供了文件名的扩展机制. 常见的通配符如下: * 匹配除了 / 之外的任意数量的 ...
- android 基础控件 EditText
EditText 简介: EditText 控件继承 TextView ,它有TextView的所有属性和方法,并且自身是可编辑的: extends TextView java.lang.Object ...
- android View 自动 GONE 问题
首先说一下 view visibility VISIBLE.INVISIBLE.GONE的区别: 可见(visible) XML文件:android:visibility="visible& ...
- 软件测试入门——测试模型(V型 W型 H型)
软件测试工程师称为“QA”,质量保证者——这是入门的第一点要学习的. 首先看基本的测试模型 1.“V”型 特点:[活动串行]这是一种古老的瀑布模型,反映了实际和测试之间的关系. 局限:仅仅把测试过程作 ...
- 一步一步学习Unity3d学习笔记系1.4单服模式架构
单服模式更适合做手游,只有一个服务器,在程序中通过代码模块来实现各功能,而不是物理模块划分. 登录模块实现,账号数据处理, 用户模块,处理角色权限处理, 匹配模块,匹配战斗 好友模块,负责好友管理 战 ...
- ZigBee无线网络技术在小区路灯照明系统的应用
小区路灯照明系统是楼宇智能的一部分,但受制于布线.成本等的问题,难以得以实施.随着计算机技术的迅猛发展,无线网络技术越来越成熟,ZigBee无线网络成本低.功耗低.传输距离远等的特点,非常适合在无线路 ...
- Virtualenv介绍
[翻译]http://virtualenv.readthedocs.org/en/latest/index.html virtualenv是创建独立python环境的一种工具. 环境搭建的过程中,有一 ...