ITPub博客

首页 > 数据库 > Oracle > oracle pctfree&pctused介绍

oracle pctfree&pctused介绍

原创 Oracle 作者:a960549548 时间:2024-03-18 08:56:19 0 删除 编辑

    pctfree这个参数定义了一个块保留空间的百分比,保留空间是为了将来可能发生的更新操作,因为更新可能增大被更新行占用的空间,如果此时该块没有可利用空间,那么只有发生row migrate了,从而会降低I/O性能。换句话说,就是当一个块的利用率达到1-pctfree的时候,oracle就将该块从freelist中移除,不再向该块插入数据。所以说pctfree是控制什么时候将块从freelist中移除的。


      pctused这个参数控制一个块什么时候被重新启用来插入数据,例如当一个块达到1-pctfree利用率的时候,oracle停止向该块插入数据,同时从freelist移除该块,但是后来发生一些删除操作,使得该块的利用率下降,当该块的利用率降到pctused以下的时候该块就被重新启用来插入数据了,也即是将该块重新加入到freelist列表中,所以说pctused是控制什么时候将一个块重新加入freelist的。

      举个例子:比如一个块的pctfree定为10%,pctused定为40%(oracle默认设置)。那么一个块的使用率达到90%(即1-10%)的时候,oracle将该块从freelist中移除,停止使用该块来插入数据(但可更新)。后来该块上发生了一些删除操作,使得该块的利用率下降,当使用率下降到40%以下的时候,oracle重新将该块加入freelist,可用于新的插入。
 
注意:
    PCTFREE和PCTUSED的值可以在创建表时指定,也可以在创建表后用修改,但是要注意的是,修改后的值,只对修改后的数据操作有影响,对之前的无效。因为OLTP系统对数据块的DML操作会较为频繁,所以在OLTP系统中正确配置这两个属性可能会对性能有一定的提高。
    在Oracle11g中,表空间默认使用本地位图自动管理,PCTFREE的默认值是10,且无法自定义管理PCTUSED属性,除非将表空间设置为手动管理。

create table tmac (t1 char(2000)) pctfree 99 pctused 1 tablespace users;
insert into tmac select 'MACLEAN' from dual connect by level <=2530;
commit;



create table tmac2 (t1 char(2000)) pctfree 10 pctused 40 tablespace users;
insert into tmac2 select 'MACLEAN' from dual connect by level <=2530;
commit;



select blocks from dba_tables where table_name='TMAC';
    BLOCKS
----------
      2638



select blocks from dba_tables where table_name='TMAC2';
    BLOCKS
----------
       874



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3009214/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE,MySQL 8.0 OCP,PMP,拥有OceanBase OBCP,TiDB PCTP,GoldenDB GDCP等多项认证,ITPUB认证专家,微信公众号:DBA之友。

注册时间:2022-02-08

  • 博文量
    132
  • 访问量
    171526