shared pool系列二:free lists/shared pool lru list

介绍free lists及shared pool lru list.

Shared pool中chunk的分配

1、shared pool中的chunk的大小是不一样的,但是是连续的

2、因为chunk是分配的最小单元,因此session需要给对象分配空间的时候,会以chunk为单位进行申请

3、可用的chunk(free)会形成一个链表 feee lists,便于进行分配的时候,可以通过遍历链表寻找到可用的适合的chunk,链表是chunk进行组织和管理的一种方式

4、一个可用的chunk链表是一个bucket,shared pool中会有很多的bucket,不同的bucket中的chunk的大小不同,一般是随着bucket编号的增加而增长的

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

6、在寻找chunk的过程中,如果一个bucket中没有合适的chunk,接着寻找另外一个非空的bucket,如果所有的bucket中都没有合适的chunk,那么就从rec类型的链表中释放一部分的空间,为free,或将free做适当合并  。。注意:只有rec类型的chunk能够被释放空间,即使释放了空间,这些空间可能都不是连续的,都是一些很小的chunk,这样可能形成这样一种情况,shared pool中有空间但是是大量的非常小的chunk,这样在寻找chunk的时候,也很难寻找到合适的chunk--共享池碎片

7、shared pool中所有类型的chunk都是以链表的方式进行管理的

##############

free list 空闲列表

按bucket划分,共有255个,bucket 0---bucket 254

每个bucket上挂有一个 chunk list; free lists上的都是未使用的chunk--状态free

free lists上Bucket大小的分布情况:  --环境LINUX 32位/ORACLE 11.2.0.4

Bucket 0-199之前 Bucket size以4bytes递增

Bucket 200-239这一段的Bucket size以64bytes递增

Bucket 240--254的Bucket size增长看起来没太大规律,总之是递增了哈哈。

因为free chunk数量非常的多,这样划分每个Bucket容纳的chunk数量减少,查找效率提高,对shared pool latch的争用也大大减少。注意:如果在shared pool中出现了大量的小的free chunk,就会出现share pool latch争用的情况,即使增加共享池的大小,这个问题随着时间还是会出现的。

RESERVED FREE LISTS:

RESERVED FREE LISTS上的bucket个数我DUMP出来的是15个。

保留FREE LISTS,在SQL语句所需CHUNK大于4400bytes时,会在RESERVED FREE LISTS中查找空闲CHUNK。

如果SQL语句所需CHUNK不大于4400bytes时,只会在free list 中查找CHUNK。

这个是由隐含参数控制的:_shared_pool_reserved_min_alloc          minimum allocation size in bytes for reserved area ,默认值4400

###################

DUMP 共享池查看free lists/bucket/RESERVED FREE LISTS结构:--用新建会话来做

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

select value from v$diag_info where name like 'De%';

/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_7876.trc

查看TRACE文件内容: --找这一段的方法:VI搜索HEAP DUMP

 Chunk 2bffa844 sz=    22460    freeable  "character set m"

Total heap size    =146798680    -- 146798680/1024/1024 --139.99813    初始化参数:shared_pool_size--140M

FREE LISTS:        ------空闲列,可以明显看出bucket大小分配的规律--从小到大,共有255个buckets,从16bytes到64k,采用此方法分配内存,可以有效的减少内存碎片。每个Bucket之间都用double linked 相互连接

Bucket 0 size=16

 Chunk 2bc00048 sz=        0    kghdsx

Bucket 1 size=20   20字节的Bucket 1,有很多个Chunk,节约篇幅省略了

 Chunk 23a60468 sz=       20   free      "               "

 Chunk的地址、大小、状态

 Chunk 23ceb498 sz=       20    free      "               "

 Chunk 237fcde4 sz=       20    free      "               "

Bucket 2 size=24   --Bucket 2   --24字节,也就是Bucket 2的 size范围在20-24字节。。

 Chunk 245b13e4 sz=       24    free      "               "

 Chunk 23ace7c0 sz=       24    free      "               "

 Chunk 239c5a28 sz=       24    free      "               "

Bucket 3 size=28

 Chunk 24540e9c sz=       28   free      "               "

 Chunk 2521209c sz=       28    free      "               "

 Chunk 23483448 sz=       28    free      "               "

………………

Bucket 198 size=1388

Bucket 199 size=1452                   ---------- Bucket 200之前 Bucket size以4bytes递增

 Chunk 2347d2ac sz=     1492    free      "               "

Bucket 200 size=1516                                                ----------Bucket 200之后 Bucket size以64bytes递增

 Chunk 24b28a94 sz=     1548    free      "               "

Bucket 201 size=1580                                      

 Chunk 2433bb14 sz=     1620    free      "               "

 Chunk 2463a89c sz=     1620    free      "               "

 Chunk 24b829c4 sz=     1620    free      "               "

Bucket 202 size=1644

 Chunk 23498518 sz=     1704    free      "               "

 Chunk 23de90d0 sz=     1696    free      "               "

………………

Bucket 236 size=3820

Bucket 237 size=3884

Bucket 238 size=3948

Bucket 239 size=4012               --------------Bucket 200到-Bucket 239这一段的Bucket size以64bytes递增

Bucket 240 size=4096               -----------Bucket 239之后 的Bucket size增长看起来没太大规律,总之是递增了哈哈

Bucket 241 size=4100

Bucket 242 size=4108

Bucket 243 size=8204

Bucket 244 size=8460

Bucket 245 size=8464

Bucket 246 size=8468

Bucket 247 size=8472

时间: 2024-11-03 20:56:25

shared pool系列二:free lists/shared pool lru list的相关文章

WorldWind系列二:擒贼先擒王篇1

有了WorldWind系列一的基础,我们已经可以进行正常调试运行啦!可以先操作看看软件的功能吧,这样我们才可以知道WorldWind有哪些功能等待我们学习的. 开始我们的"WorldWind系列二:擒贼先擒王"分析WorldWind主窗体,从Main函数入口一步步解析学习.至少对于我来说,里面有很多知识要学的.(补充一下:无法进入WorldWind.cs窗体的设计界面,这个问题我早就发现了,但没解决,我们根据功能直接看代码吧) 1.使用System.Version在内部,读取软件版本信

iOS开发UINavigation系列二——UINavigationItem

iOS开发UINavigation系列二--UINavigationItem 一.引言         UINavigationItem是导航栏上用于管理导航项的类,在上一篇博客中,我们知道导航栏是通过push与pop的堆栈操作来对item进行管理的,同样,每一个Item自身也有许多属性可供我们进行自定制.这篇博客,主要讨论UINavigationItem的使用方法. UINavigationBar:http://my.oschina.net/u/2340880/blog/527706. 二.来

VSTO之旅系列(二):创建Excel解决方案

原文:VSTO之旅系列(二):创建Excel解决方案   本专题概要 引言 创建VSTO项目 Excel对象模型 创建Excel外接程序 创建Excel文档级自定义项 小结   一.引言 也许很多朋友都没有听说过VSTO这个东西的,本人之前也同样也不知道的,但是由于工作的原因接触了这方面,由于VSTO方面国内的资料比较少,本人刚开始学习的时候都是参考MSDN的,但是上面很多资料都是英文的,可能学习起来会比较慢点,所以本人把最近一段时间学习的内容记录下来,一来是作为一个巩固的学习笔记,二来希望这些

Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSDK分享组件的,奈何需要去注册各平台的账号,还要审核,有些审核还挺久,就没办法,改为写这个Bmob了,相信大家对Bmob都是挺期待的吧,因为他作为Android后端的实现很好的支持,国内很多软件都在使用它,他的功能也是特别神奇,这里就不一一细说了,我们用实际的例子来见证他的神奇 官网:http://w

iOS中CoreData数据管理系列二——CoreData框架中三个重要的类

iOS中CoreData数据管理系列二--CoreData框架中三个重要的类 一.引言     在上一篇博客中,介绍了iOS中使用CoreData框架设计数据模型的相关步骤.CoreData框架中通过相关的类将数据--数据模型--开发者无缝的衔接起来.NSManagedObjectModel对应数据模型,即上篇博客中我们创建的.xcdatamodeld文件:NSPersistentStoreCoordinator相当于数据库与数据模型之间的桥接器,通过NSPersistentStoreCoord

系列二VS项目软件配置工具介绍

原文:系列二VS项目软件配置工具介绍 Svn和VisualSvn介绍      在使用TortoiseSvn(SVN客户端)+ AnkhSvn(VS2008插件) +VisualSvn Server(版本控制服务器)进行源代码版本控制前,有必要先了解下Subversion(Svn).     Svn(Subversion)是近年来崛起的版本管理工具,是CVS的接班人.目前,绝大多数开源软件都使用Svn作为代码版本管理软件.      Svn客户端: Subversion的客户端有两类,一类是we

xen虚拟化实战系列(二)之xen虚拟机安装

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1284591 xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装xen虚拟化实战系列(二)之xen虚拟机安装xen虚拟化实战系列(三)之xen虚拟机复制xen虚拟化实战系列(四)之xen虚拟机扩展磁盘空间一法xen虚拟化实战系列(五)之xen虚拟机扩展磁盘空间再一法xen虚拟化实战系列(六)之x

iOS流布局UICollectionView系列二——UICollectionView的代理方法

iOS流布局UICollectionView系列二--UICollectionView的代理方法 一.引言         在上一篇博客中,介绍了最基本的UICollectionView的使用和其中我们常用的属性和方法,也介绍了瀑布流布局的过程与思路,这篇博客是上一篇的补充,来讨论关于UICollectionView的代理方法的使用.博客地址: UICollectionView的简介和简单使用:http://my.oschina.net/u/2340880/blog/522613 二.UICol

WPF入门教程系列二——Application介绍

原文:WPF入门教程系列二--Application介绍 一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在.和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离. 微