Home  >  Article  >  Database  >  Oracle 自动段空间管理(ASSM)

Oracle 自动段空间管理(ASSM)

WBOY
WBOYOriginal
2016-06-07 17:07:151042browse

从Oracle 9i开始,管理段空间有两种方法:手动段空间管理和自动段空间管理(Auto Segment Space Management,ASSM); ASSM用位图来跟

从Oracle 9i开始,管理段空间有两种方法:手动段空间管理和自动段空间管理(Auto Segment Space Management,ASSM);

ASSM用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%和

对于ASSM,只需控制与空间使用相关的一个参数:PCTFREE。创建段时也可以接受其他参数,但是这些参数将被忽略。

在存储/段 特征这方面,应用于ASSM段的存储设置只有:

BUFFER_POOL

PCTFREE

INITRANS

MAXTRANS(仅用于9i,在10g及以上版本中,所有段都会忽略这个参数。)

BUFFER_POOL : 可以将表放到keep或其它中,如: ALTERTABLE Table_Name STORAGE ( BUFFER_POOL KEEP) ;

PCTFREE:该参数用于告诉oracle应该在块上保留多少空间来完成将来的更新,默认10%。如果自由空间百分比高于PCTFREE中指定的值,这个块就被认为是自由的。

使用ASSM时,PCTFREE会限制能否将一个新行插入到一个块中,但是它不会控制一个块是否在FRRELIST上,因为ASSM根本不会使用FREELIST,在ASSM中PCTUSED也被忽略。

PCTFREE有3种设置:太高、太低、刚刚好。如果把块的PCTFREE设置的太高,就会浪费空间。如果把PCTFREE设置为50%,而你从未更新数据,,那么每个块都会浪费50%的空间。不过,在另一个表上,可能50%非常合理。如果行最初很小,现在想将行的大小加倍,但是倘若 PCTFREE设置太小,更新行时就会导致行迁移。


行迁移是指(rowmigration)是指由于某一行变得太大,无法再与其余的行一同放在创建这一行的块中,而放到其它的块中。

如果这种行迁移所占的比例相当大,而且有大量用户在访问这些行,访问这些数据的速度就会开始变慢,因为额外的i/o以及与i/o相关的闩定都会增加访问时间,缓冲区缓存的效率开始下降,因为需要缓存两个块,而如果没有行迁移只需要缓存一个块。另外表的大小和复杂性都有所增加。


如何设置PCTFREE(ASSM):

如果你插入了将要更新的大量数据,而且这些更新会频繁地增加行的大小,此时可以设置比较高的PCTFREE,因为这可以在插入后在块上预留大量空间。

如果只想对表完成INSERT或DELETE,或者UPDATE只是对行大小影响比较小,此时可以设置比较低的PCTFREE。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn