Oracle 数据块优化参数

原创
2016-06-07 17:27:54735浏览

Oracle自动管理块空闲空间的条件:当一个插入或者更新操作的行在一个数据块中有足够空闲空间,并且这个空闲空间碎片状态,无法满

用于数据块优化的两个参数:pctfree和pctused一般都是用在OLTP系统当中。两者并没有相互的关系,当满足其中一种条件的时候,就会被出现/移除free-list列表当中。

Oracle自动管理块空闲空间的条件:当一个插入或者更新操作的行在一个数据块中有足够空闲空间,并且这个空闲空间碎片状态,无法满足一行数据的使用。Oracel不总是自动整理碎片(合并空闲空间)的原因是,这回导致一定的系统资源开销。

pctfree:当数据块中的数据量达到这个值将不允许继续插入数据

pctused:当数据块中数据占用空间小于这个比例时,数据块会被再次使用

行连接:指一行存储在多个块中的情况,这是因为该行的长度超过了一个块的可用空间大小,即行链接是跨越多块的行。一般是Insert操作时候。

行迁移:指一个数据行不适合放入当前块而被重新定位到另一个块(那里有充足的空间)中,但在原始块中保留一个指针的情形。原始块中的指针是必需的,因为索引的ROWID项仍然指向原始位置。一般是update操作的时候。

PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update;即:当使用一个block时,在达到pctfree之前,该block是一直可以被插入的,这个时候处在上升期。

PCTUSED:是指当块里的数据低于多少百分比时,又可以重新被insert,一般默认是40,即40%,即:当数据低于40%时,又可以写入新的数据,这个时候处在下降期。

一、计算公式:

PCTFREE=(Average Row Size-Initial Row Size)*100/Average Row Size

PCTUSED=(100-PCTFREE) -Average Row Size * 100/Availabe Data Space

SQL> select table_name,AVG_ROW_LEN from user_tables where table_name in ('TAB1','TAB2');

二、举例说明

假设你一个块可以存放100个数据,而且PCTFREE 是10,PCTUSED是40,则:不断的向块中插入数据,如果当存放到90个时,就不能存放新的数据,这是受pctfree来控制,预留的空间是给UPDATE用的。

当你删除一个数据后,再想插入个新数据行不行?不行,必须是删除41个,即低于40个以后才能插入新的数据的,这是受pctused来控制的。

注意:如果表空间上启用了ASSM,在建立表的时候,只能指定PCTFREE,否则可用指定PCTFREE和PCTUSED。



三、调整pctfree与pctused

1、通过user_tables的pct_free,pct_used来查看

select a.table_name, a.pct_free, a.pct_used, a.* from user_tables a;

说明:

pctfree表示用于保留更新操作的百分比,如果超过该值不能插入数据。

pctused表示数据所占最低百分比,如果达到pctfree时不能插入,delete后如果达到pctused才可以用来insert



2、如果你使用的是自动管理表空间pctused不需要设置

altertable tablename pctfree values;

说明:

pctfree默认是10,主要看更新的数据有多大,,可以查看表的max_row_len如果很大又频繁更新可以考虑增加该值。

pctused主要看删除数据的大小,如果很大可以调大该值,如果不是很频繁可以设置小一些30-40

pctused+pctfree<90



3、查看自动管理表空间

select tablespace_name,segment_space_management from user_tablespaces; --segment_space_management为auto表示自动管理表空间

主要起到节省表空间的作用。


4、pctfree和pctused的使用

较高的pctfree的值大约在20到25之间,较低的值为4或5,可用于静态表或只读表。

除非要严格地管理可用空间,否则不要设置pctused超过40或50。

一般这两个值地和不能达到90,否则会使Oarcle将更多地时间花费在处理空间利用上。下面是几个参考:

pctfree 5,pctused 40 适合于静态表或只读表。

pctfree 10,pctused 50 适合插入行后,更新活动不会增加已有行地长度地综合性OLTP系统。

pctfree 20,pctused 40 适合于插入行后,更新活动会增加已有行地长度地OLTP系统。

linux

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。