ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据表创建参数介绍(四)

数据表创建参数介绍(四)

原创 Linux操作系统 作者:realkid4 时间:2011-03-06 16:08:27 0 删除 编辑

 

ü        FREELISTS

 

Freelists与Freelist Group都是涉及到段对象空间分配的机制。分配给数据段的空闲空间包括两个部分,高水位线HWM以上空闲块和HWM以下空闲块。

 

其中,HWM以下的空闲空间是通过Freelists进行管理。简单的说,Freelists就是一个列表,列表上连接着所有管理的空闲数据块。当进行insert或者update操作的时候,数据表段segment需要额外的空闲数据块,就需要段segment进行空闲块的管理。

 

在这个过程中,每个段头上都有专门的freelists,进行空闲块的管理。freelists参数就表示附加在这个段对象上处理freelist的个数,也就是一个freelists group上所容纳的freelists的个数。

 

在我们的实例参数中,取定freelists=1,表示该数据表中每个freelists group上包括一个freelists。该参数的最小值为1,最大值的选取与当前数据库使用数据块大小db_block_size密切相关。如果设置不合适,会在运行阶段报错。

 

 

使用freelist的时候,当系统需要空闲块保存数据是,会向freelist进行空间请求,容易成为性能的瓶颈所在。所以从9i开始,Oracle引入了位图表进行freelist的管理。

 

 

ü        Freelist Group

 

指定创建数据对象上使用的Freelist Group的数量。我们说,默认情况下,是使用一个freelist进行数据空闲块管理。一些数据表如果分配比较频繁,单个freelist可能不能满足实际的需要,这时候可以考虑使用多个freelist group来缓解空间块管理压力。

 

 

说明:对表空间空间的管理,Oracle存在手工段管理方式下Segment Management Manual。如果设置为自动段空间管理ASSM下,freelists和freelist group两个参数是不其效果的。

 

 

ü        Buffer_POOL参数

 

Buffer_Pool参数决定了该数据段对象在SGA缓冲区中的管理策略。Oracle是不会直接对数据文件中的数据进行操作的。对数据的读写操作,都是需要对文件以数据块的形式加载在内存SGA共享区中,之后对数据块进行操作。如果是修改或者新增加操作,则由DBWn后台进行写回数据文件。

 

 

数据块在SGA区中驻留的场所就是Buffer Pool。Oracle在访问一条数据的时候,首先会在Buffer Pool中寻找,看看该块是不是已经缓存在Buffer Pool中了。如果没有,就从数据文件中获取这个数据块。长期DBA们关注的数据块命中率,也就是在Buffer Pool中发生的。

 

 

一般内存是小于数据库容量的。为了加快速度,最理想的情况是将所有的数据加载在内存中。但是这种方法还存在一些距离。所以,总会有数据块被从Buffer Pool中替换掉。目前Oracle采用LRU算法进行数据块淘汰,也就是最常用、访问最频繁的数据块会更长时间保存在缓冲区内,很少访问的数据块可能很快的被剔出缓冲区。这样做的目的也就是保证经常访问数据访问速度。

 

 

在这样的基础上,Oracle对Buffer Pool进行了进一步的划分。划分为keep、default和recycle三个子池,这样的划分目的是在业务范畴上对数据进行进一步的分治。

 

ü        keep池的含义就是保持最长的时间。keep池中的对象,都是定义为经常使用的对象,保持最大限度的驻留时间。不会轻易被剔出Buffer Cache;

ü        recycle池是为了不经常访问的数据对象块准备的。通常被加载之后,不希望长时间的保存。

ü        default是buffer pool的默认选项,是介于keep和recycle两类之间的一种对象缓存方式。

 

要说明的是两点:

 

1、三种类型池对象虽然目的定义不同,但是使用的管理算法仍然是LRU算法。区别只是在从业务上对数据对象进行划分,而这个定义是掌握在系统设计和DBA手中;

2、当我们对SGA空间进行动态管理的时候,三个缓存池空间是通过Oracle动态进行调整的。所以,我们现在已经不需要分别定义空间的大小,而只需要定义三类对象是什么就可以了。

 

 

回到buffer_pool参数,经过了上面的说明。buffer_pool的含义也就比较清楚了。Buffer_pool定义了该段对象进行缓存的策略。取值有default、keep和recycle。

 

 

 

经过这个系列,我们初步研究了涉及段对象的基本参数和用法。当然每个参数在使用的时候是有不同的侧重和方向,本文的作用也只是一个浏览引导。进一步请参考Oracle相关文档中的说明。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-688508/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7677553