相关概念

  • 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的分配过程

  1. 当需要从shared pool中寻找chunk的时候,首先会定位一个bucket,然后遍历bucket,寻找最合适的chunk.如果chunk的空间比需要的空间大,那么这个chunk就拆分成两个,一个被分配、一个成为free,重新挂接到相应大小的bucket上。
  2. 在寻找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

最新文章

  1. CentOS7 + mono +Jexus 环境的搭建
  2. javascript学习总结(三):如何较好的使用js。
  3. C#通用类Helper整理
  4. docker-image container 基本操作 -常用命令
  5. URL参数GB2312和UTF-8编码 自动识别
  6. 关于AWR报告命中率指标的解释(转)
  7. 2的N次方 【转】
  8. Window下开发React-Native Android步骤
  9. Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
  10. java aes encrypt
  11. TreeSet(一)--排序
  12. Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.thinkplatform.dao.UserLogDao' available: expected at least 1 bean which qualifies as autowi
  13. UOJ#291. 【ZJOI2017】树状数组 树套树
  14. vue 用huilder打包APP时,安卓按返回键就退出App改为按两次再退出App
  15. 如何在github上搭建网站?
  16. Python2.7-内置类型
  17. day10-连接mysql虚拟机报错
  18. python 爬取全量百度POI
  19. 在windows上搭建C语言开发环境——借助eclipse和MinGW
  20. xp系统报错 windows explorer has encountered a problem and needs to close.We are sorry for the inconvenience

热门文章

  1. 修复:"Failed to start Load Kernel Modules"
  2. vc 递归删除非空文件夹
  3. Python安装Selenium3
  4. 怎样用CODESOFT打印连续的条码标签?
  5. Mysql 自动增长 重置
  6. Acronis Server备份Linux系统
  7. PAT1038. Recover the Smallest Number
  8. php获取文件创建时间、修改时间
  9. leetcode 70
  10. poj1005 I Think I Need a Houseboat