您的位置:首页 > 其它

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

2010-04-21 16:18 127 查看
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还有freelist,freelist group都起作用,一起来控制块的使用。但是如果segment采用auto的管理方式时(ASSM),参数PCTUSED ,还有freelist,freelist group都将被忽略(PCTFREE参数仍是使用),因为ASSM采用位图来管理。具体MSSM和ASSM的特点和使用,以后会针对的总结。

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

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

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

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

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

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

标记为满的块什么时候在回到freelist中呢?这就需要 PCTUSED和transaction 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语句中改变,如果指定的值小于最小值,则按最小值创建。在segment的ASSM和MSSM中都起作用,因为是初始分配啊!!(默认是64k的大小,在数据文件头用于管理extent的位图大小)
NEXT
第二个Extent的大小等于NEXT的初值,以后的NEXT值=前一NEXT大小乘以(1+PCTINCREASE/100),对于extent的DMT,表段按着next扩展。对于extent的LMT,如果是系统管理的LMT,oracle会自己计算扩展extent的大小,如果设置统一区大小(设置uniform),就按其指定大小扩展。
MINEXTENTS
Segment第一次创建时分配的Extent数量。DMT和LMT都适用
MAXEXTENTS
随着Segment中数据量的增长,最多可分配的Extent数量
PCTINCREASE
指定其后的Extent相对于上一个Extent所增加的百分比,如果PCTINCREASE为0,则Segment中所有新增加的Extent的大小都相同,等于NEXT的值,如果PCTINCREASE大于0,则每次计算NEXT的值(用上面的公式),PCTINCREASE不能为负数。
OPTIMAL
仅与回滚段有关,当回滚段因为增长、扩展而超过此参数的设定范围时,Oracle系统会根据,情况动态地重新分配Extents,试图收回多分配的Extent。
FREELISTS
只能在CREATE TABLE、CLUSTER、INDEX中指定FREELISTS和FREELIST 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-------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐