日期:2014-05-16  浏览次数:20460 次

演示PCTUSED和PCTFREE对数据操作的影响

  PCTFREE当数据块中的数据量达到这个值时,将不允许继续插入数据; PCTUSED当数据块中数据占用空间小于这个比例时,数据块会被再次使用。 

  PCTFREE实验,随着pctfree越来越大,block装的记录越少,占用的数据块越多。

SQL> create table test as select rownum as id from dual connect by level<=1960;
表已创建。
SQL> create table test1 pctfree 20 as select rownum as id from dual connect by level<=1960;
表已创建。
SQL> create table test2 pctfree 40 as select rownum as id from dual connect by level<=1960;
表已创建。
SQL> create table test3 pctfree 60 as select rownum as id from dual connect by level<=1960;
表已创建。

SQL> select block_id,count(*) from
    (select dbms_rowid.rowid_block_number(rowid) block_id,
           dbms_rowid.rowid_row_number(rowid) num
      from test)  group by block_id;
  BLOCK_ID   COUNT(*)
---------- ----------
    538805        657
    538804        657
    538806        646

SQL> select block_id,count(*) from
    (select dbms_rowid.rowid_block_number(rowid) block_id,
           dbms_rowid.rowid_row_number(rowid) num
      from test1)  group by block_id;
  BLOCK_ID   COUNT(*)
---------- ----------
    545348        584
    545349        584
    545351        208
    545350        584

SQL> select block_id,count(*) from
    (select dbms_rowid.rowid_block_number(rowid) block_id,
           dbms_rowid.rowid_row_number(rowid) num
      from test2)  group by block_id;
  BLOCK_ID   COUNT(*)
---------- ----------
    833380        437
    833383        437
    833384        212
    833381        437
    833382        437

SQL> select block_id,count(*) from
    (select dbms_rowid.rowid_block_number(rowid) block_id,
           dbms_rowid.rowid_row_number(rowid) num
      from test3)  group by block_id;
  BLOCK_ID   COUNT(*)
---------- ----------
    833389        291
    833390        291
    833391        291
    833392        291
    833394        214
    833388        291
    833393        291

 

      PCTUSED实验,需要建一个手动管理的表空间才行,当删除一个块中的一些数据后再插入一些数据,可以看到PCTUSED值越小的数据块越多。

SQL> create tablespace USERS02 datafile 'D:\oracle\product\10.2.0\oradata\ordb10\USER02.DBF'
  size 100m autoextend on next 10m segment space man