您的位置:首页 > 数据库 > Oracle

数据表的类型 段 行迁移 pctfree pctused initrans

2011-11-03 16:44 946 查看
关键词:数据表 段 行迁移 pctfree pctused initrans

数据库表的类型:

1.堆组织表
***
2.索引组织表
3.索引聚簇表
4.散列聚簇表
5.有序散列聚簇表
6.嵌套表
7.临时表
8.对象表
9.外部表

段(segment)是占用磁盘上存储空间的一个对象。

1.一个表,一个索引也是一个段。除非是表分区,索引分区,则会出现一个表,索引对多个段的情况。
2.表,索引本身只是一个逻辑定义,不是物理的。

段空间管理

手动段空间管理(Manual Segment Space Management,MSSM)
须关注freelists,freelist groups,pctfree,pctused,initrans,maxtrans等参数
自动段空间管理(Automatic Segment Space Management,ASSM)
只须关注PCTFREE参数

高水位线(high-water mark,HWM):

把表想象成从左到右依次排开的一系列块,高水位线就是包含了数据最右边的块。
用了对象的块就会把HWM升高,只有到重建,截除或收缩这个对象,才会把HWM降低。
delete表中的行不会把HWM降低,truncate能把表的HWM置回0。
每次段全面扫描时,都会从头扫描到HWM。如果其中delete了挺多内容,则每次都须扫描很多空块,影响性能。
例子:创建一个10000行的表,select count(*),再delete全部行,再select count(*),发现时间是一样的。

行迁移

更新一行时,使其变大,原数据块再也容纳不下,则留下一个转发地址,就把整行迁移到别的数据块上。
这不仅是读取数据块时多一次I/O的问题,如果很多数据块出现行迁移,而且大量用户在访问这些块,缓存区每次缓存从一个块变成两个块,还有闩的问题,所以尽量避免行迁移。
迁移后的数据块如果自身在增大,容量不够后,会把行迁回原地。如果原地没足够空间,会寻找新的数据块去容纳,并且把原数据块的转发地址指向新的宿主,避免了多层间接迁移的问题。

PCTFREE(一般是10%):一个数据块保留以待扩充行时使用的空间。
PCTFREE高了,浪费空间;低了,容易产生行迁移。

PCTUSED:当数据块的容量降低到PCTUSED后,可以重新挂到freelist中,以供使用。(在ASSM中不用考虑)

INITRANS
段中每个块都有一个块首部,首部有一个事务表,事务表中会建立一些条目来描述块中哪些行被哪些事务锁定。事务表出事大小为INITRANS,默认为2。可动态扩展到MAXTRANS.(ORACLE10G后忽略了MAXTRANS,段的MAXTRANS都是255)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息