试验结论:
1、当一张表自建立后只有新增基本不更新时(如存放历史记录的表),可以将pctfree参数尽量调低,这样表数据存储空间以及全表扫描时消耗都会更低;
2、但当表存在大量的update操作时,pctfree调低将会导致修改操作以及修改后表查询性能的性能下降,主要原因为产生了行迁移或行迁移
试验步骤:
一、创建试验表,分别设置pctfree为30与5
create table t_pctfree_30
(
name varchar2(20),
created date
)
tablespace users
pctfree 30;
create table t_pctfree_5
(
name varchar2(20),
created date
)
tablespace users
pctfree 5;
二、插入随机字符串
begin
for i in 1 .. 10000 loop
insert into t_pctfree_30 values(dbms_random.string('u', 10),sysdate+s_test_id.Nextval/24/60/60);
end loop;
end;
/
begin
for i in 1 .. 10000 loop
insert into t_pctfree_5 values(dbms_random.string('u', 10),sysdate+s_test_id.Nextval/24/60/60);
end loop;
end;
/
三、查看两张实验表占用空间情况
SQL> select s.segment_name,s.BYTES,s.blocks from user_segments s where s.segment_name in ('T_PCTFREE_5','T_PCTFREE_30');
SEGMENT_NAME
--------------------------------------------------------------------------------
BYTES BLOCKS
---------- ----------
T_PCTFREE_5
327680 40
T_PCTFREE_30
393216 48
四、开启执行计划,查看查询性能消耗,可以发现PCTFREE为30的表比5的实验表全表扫描时,cpu消耗增加20%左右
SQL> select count(0) from T_PCTFREE_30;
Execution Plan
----------------------------------------------------------
Plan hash value: 3114683171
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
---------------------------------------------------------------------------
|