Oracle pctfree 和 pctused

来源:这里教程网 时间:2026-03-03 17:31:39 作者:

       pctfree 这个参数定义了一个块保留空间的百分比,保留空间是为将来可能发生的更新操作,因为更新可能增大被更新行占用的空间,如果此时此刻没有可利用空间,那么只有发生row migrate(行迁移),从而会降低I/O性能。 换句话说,当一个块利用率达到 1-pctfree 的时候,oracle 就将该块从freelist中移除,不再向该块插入数据。 所以说pctfree 是控制什么时候将块从freelist中移除的。        pctused 这个参数控制一个块什么时候被重新启用来插入数据,例如当一个块达到1-pctfree 利用率的时候,oracle 停止向该块插入数据,同时从freelist移除该块,但是后来发生一些delete 操作,使得该块的利用率下降,当该块的利用率降到pctused以下的时候该块就被重新启用来插入数据,也就是将该块重新加入到freelist列表中, 所以说pctused 是控制什么时候将一个块重新加入到freelist的。      例如: 一个块的pctfree定为10%, pctused 定为40%(oracle 默认设置)。那么一个块使用率达到90%的时候,oracle 将该块从freelist中移除,停止使用该块来插入数据(可更新)。 后来该块上发生了delete 操作,使得该块的利用率下降,当使用率下降到40%以下的时候,oracle 重新将改块加入freelist, 可用于新的插入。      注意: PCTFREE 和 PCTUSED 的值可以在创建表时指定,也可以在创建表后修改,但是要注意的是,修改后的值,只对修改后的数据操作有影响,对之前的无效。 因为OLTP系统对数据块的DML操作较为频繁,所以在OLTP系统中正确配置这两个属性可能会对性能有一定提高。      Oracle11g中,表空间默认使用本地位图自动管理, PCTFREE的默认值为10, 且无法自定义管理PCTUSED属性,除非将表空间设置为手动管理。 -- Create tablecreate table TEST(  ID   INTEGER,  NAME VARCHAR2(20))tablespace USERS   pctfree 10  initrans 1  maxtrans 255;

相关推荐