基础学习--表的存储参数(三)

来源:互联网 发布:淘宝客双十一怎么赚钱 编辑:程序博客网 时间:2024/06/06 03:42

author: skate

time:2010-04-21


今天主要总结下关于table创建的相关参数,oracle东西真是太多了,只是个table参数就有非常多的内容,我是越查资料,内容越多。这里也只是简单介绍参数。关于每个参数的设置及不同的设置会产生什么影响,以后在详细讨论总结

 

表的存储参数

 

建表脚本:

CREATE TABLE TEST1

(

  A  INTEGER,

  B  VARCHAR2(100 BYTE),

  C  VARCHAR2(100 BYTE)

)

TABLESPACE YYTICKETS

PCTUSED    0

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

            INITIAL          64K

            MINEXTENTS       1

            MAXEXTENTS       2147483645

            PCTINCREASE      0

            BUFFER_POOL      KEEP

           )

LOGGING

COMPRESS

NOCACHE

PARALLEL ( DEGREE 2 INSTANCES DEFAULT )

MONITORING;

 

下面就上面的脚本参数来说明下其含义

 

TABLESPACE指定表所在的表空间

在介绍PCTUSED PCTFREE 这两个参数的时候,要简单介绍下segment的管理方式(MSSM),如果segment采用manual管理方式的话,参数PCTUSED PCTFREE还有freelistfreelist group都起作用,一起来控制块的使用。但是如果segment采用auto的管理方式时(ASSM),参数PCTUSED ,还有freelistfreelist group都将被忽略(PCTFREE参数仍是使用),因为ASSM采用位图来管理。具体MSSMASSM的特点和使用,以后会针对的总结。

 

PCTUSED:这个参数是控制一个块何时进入可用列表,如果设置不合理会浪费空间,即虽然有很多可用空间的块,但无法加入可用列表(在MSSM时有作用,在ASSM忽略,)

 

PCTFREE:这个参数是控制一个块快满时,何时从可用列表移除,使其不再作为插入一个堆组织表的备选块(在MSSMASSM都起作用)

 

注意:

indexesIOT等复杂的数据结构中,除了初始创建或重建对象外,否则都不使用PCTFREE设置,因为这些对象必须放在该行所属的地方。

 

PCTUSEDPCTFREE常见的几种分配方案:
Pctfree 20     Pctused 40        --
大量Update操作
Pctfree 5     Pctused 60        --
大量Insert, Select, 少量Update
Pctfree 5     Pctused 90        --
体积大的表, Select较多

 

以为上面的表所在的表空间上的segment采用ASSM管理方式所有没有freelistfreelist group这两个参数。

 

FREELIST:是oracle记录一个对象在高水位标记下块的使用情况。在MSSM方式中,块是通过可用列表(freelist)来控制管理使用。简单描述下可用列表的使用,其实一个segment有三种freelistmaster freelistprocess freelisttransaction freelist三种。其中master freelistprocess freelist是主从协同关系的,当要使用数据块的时候,现在process freelist 上查找  可用数据块,如果没有在到master freelist上去一组空闲块到process freelist 然后再在上面分配所需块。segment在段头默认设置1,所以为了并发性能,避免freelist争用就所多分配几个freelist

 

标记为满的块什么时候在回到freelist中呢?这就需要 PCTUSEDtransaction freelist共同的作用来控制把块挂到freelist上面,具体原因以后分析。

 

FREELIST GROUP:每个segment只有一个master freelist,通知设置FREELIST GROUP参数可以增加master freelist,避免其争用。

 

 

INITRANS:这个参数是很重要的它指定了初始化事务槽的数量。事务槽是一个十分重要的对象,每个事务要修改某个数据块的时候,需要在这个数据块中分配一个事务槽。如果当前没有空闲的事务槽,就需要动态扩展一个,每个事务槽需要24个字节,讲到事务槽,大家可能明白了Oracle分配空间为什么要从底部向顶部分配空间了,事务槽是从顶部向底部分配空间的,这样的话,两个分配方式不会冲突。一般情况下,缺省的事务槽参数并不会带来明显的性能问题,不过对于一些并发修改较大的表,如果PCTFREE参数设置过低,就会导致事务槽扩展的时候无法分配空间,从而导致事务等待事务槽

 

关于存储参数(storage子句)介绍之前也要事先说明下,关于表空间extent(最小分配单位)的分配方式,oracle是采用字典管理(DMT)和本地管理(LMT)。如果是DMT方式的话,sotrage的所有参数都起作用,如果是LMT的方式的话,storage的部分参数就被忽略了

 

 

表的存储参数(storage子句)

参数名称

说明

INITIAL 

分配给Segment的第一个Extent的大小,以字节为单位,这个参数不能在alter语句中改变,如果指定的值小于最小值,则按最小值创建。在segmentASSMMSSM中都起作用,因为是初始分配啊!!(默认是64k的大小,在数据文件头用于管理extent的位图大小)

NEXT

第二个Extent的大小等于NEXT的初值,以后的NEXT=前一NEXT大小乘以(1+PCTINCREASE/100),对于extentDMT,表段按着next扩展。对于extentLMT,如果是系统管理的LMToracle会自己计算扩展extent的大小,如果设置统一区大小(设置uniform),就按其指定大小扩展。

MINEXTENTS   

Segment第一次创建时分配的Extent数量。DMTLMT都适用

MAXEXTENTS   

随着Segment中数据量的增长,最多可分配的Extent数量

PCTINCREASE  

指定其后的Extent相对于上一个Extent所增加的百分比,如果PCTINCREASE0,则Segment中所有新增加的Extent的大小都相同,等于NEXT的值,如果PCTINCREASE大于0,则每次计算NEXT的值(用上面的公式)PCTINCREASE不能为负数。

OPTIMAL       

仅与回滚段有关,当回滚段因为增长、扩展而超过此参数的设定范围时,Oracle系统会根据,情况动态地重新分配Extents,试图收回多分配的Extent

FREELISTS    

只能在CREATE TABLECLUSTERINDEX中指定FREELISTSFREELIST GROUPS参数。模式对象中每一个自由列表组中自由列表的数量

FREELIST GROUPS

用户创建的数据库对象的自由列表组的数量,只有用OPS并行服务器选项时才使用这一参数, 一个实例对应一个组。

BUFFER_POOL

给模式对象定义缺省缓冲池(高速缓存),该对象的所有块都存储在指定的高速缓存中。

 

参考:http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/schema.htm#9079

 

对于LMT管理方式,INITIAL MINEXTENTS MAXEXTENTS  BUFFER_POOL都是有作用的。 

 

 

 

LOGGING/NOLOGGING 记录表的更改变化,这个log用于恢复。

COMPRESS 压缩数据,有的时候可以提高性能,节省空间

NOCACHE是否缓存在default pool

 

PARALLEL ( DEGREE 2 INSTANCES DEFAULT )访问的并行度

MONITORING/MONITORING是否允许系统收集此表的信息,在10g之前是通过alter table tablename monitoring/monitoring命令来启用是否允许监控,在10g中通过statistic_level参数来控制系统信息的收集,无法用上面的命令。

 

 

-------end-------