Heim  >  Artikel  >  Datenbank  >  Oracle 数据块优化参数

Oracle 数据块优化参数

WBOY
WBOYOriginal
2016-06-07 17:27:541107Durchsuche

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 
 
 
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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn