环境:oracle 10g,表格处于自动段空间管理的表空间上.
主题:讨论建表的几个参数,和表格以及文件的增长方式.
一)对于倾向于查询的应用系统而言,或者是倾向于查询的表格,那么pctfree设置为1左右,已经足够了,之所以不这只为0, 是为了以防万一,不过对于某些绝对不可能修改的系统而言,设置为0也是可以的。
由于默认的pctfeee是10,所以,如果设置为新值0,或者1,那么可以节省将近10%的空间,而且读盘的速度也会更快一些。例如pctfeee=0,那么原来放在100个extent上的数据,现在只要在90个extent上就可以了.
例如,创建一个很简单的表格:
-- Create table
create table test_space
(
Name varchar2(24) not null
)
tablespace CRMII
pctfree 0
initrans 2
storage
(
initial 64K
next 1K
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column test_space.Name is '姓名';
二)由于oracle建议我们使用extent management local segment space managment auto ,所以,我们以后建立表格的时候,注意pctfree即可。所以对于永久表格而言,pctused基本上可以进入历史舞台了, 因为临时表并没有storage参数部分(虽然我相信,oracle会使用类似的参数管理临时表).
三) 作为一个基本的常识,了解initrans还是很有必要的。IniTrans,用于每个块中处理行级锁事务的初始表是1,索引是2,如果同一块有很多行被并发更新等操作时,建议增加该值对于serializable 隔离级,至少设置为3。但是事实上,不适宜去修改默认的值,因为事务需要在块上面写事务条目信息,这意味着,initrans越大,需要消耗的空间越大,时间也越长。
四)maxtrans ,在老版本上是为了控制最大并发事务,但是新版本已经自动这么处理了,如果需要的话也可以设置,这个参数和pctused一样,基本上是可淘汰的!
总结:
1) pctfree 很重要,但对于查询系统基本上可以设置为0
2) pctused 基本可以淘汰
3) initrans ,很重要,但如果不是特别设置,不要去修改。
4) maxtrans ,至少10g以上不用了,属于淘汰行列。
概念:
1.pctfree: 如果在建表时指定 PCTFREE 20 在一个段的每个数据块中,最多可以insert到总容量的80%,如果要再insert数据就要增加新的块,剩余的20%是为以后update使用的
2.pctused: 如果在建表时指定 PCTUSED 40 只有已使用空间小于40%时才可能insert,也就说未使用空间必须要大于60%