ITPub博客

首页 > 数据库 > Oracle > Oracle 自动段空间管理(ASSM)

Oracle 自动段空间管理(ASSM)

Oracle 作者:liuhaimiao 时间:2014-08-20 13:01:37 0 删除 编辑
从oracle 9i开始,管理段空间有两种方法:手动段空间管理和自动段空间管理(Auto Segment Space Management,ASSM);


  ASSM用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%和<25%,也就是说位图其实采用了四个状态位来代替以前的PCTUSED,什么时候该利用该数据块则由设定的PCTFREE来确定。


  对于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.


  相关信息可参考:Oracle 自动段空间管理(ASSM:autosegment space management)


  http://blog.csdn.net/tianlesoftware/article/details/4958989 Oracle ASSM三级位图块结构http://www.eygle.com/archives/2007/07/oracle_assm_level3_bmb.html http://www.itpub.net/thread-99486-1-1.html


详细请参考:http://www.codesky.net/article/201111/166873.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/223653/viewspace-1254577/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
sap技术顾问

注册时间:2014-07-29

  • 博文量
    933
  • 访问量
    862023