首页 > 数据库 > Oracle > Oracle pctfree 和 pctused
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 table
create table TEST
(
ID INTEGER,
NAME VARCHAR2(20)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21374452/viewspace-2882923/ ,如需转载,请注明出处,否则将追究法律责任。