Oracle 自動段空間管理(ASSM)

liuhaimiao發表於2014-08-20
從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.itpub.net/thread-99486-1-1.html


詳細請參考:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/223653/viewspace-1254577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章