轉載:ASSM內部儲存研究大揭密

lfree發表於2005-06-22

摘自:http://epub.itpub.net/9/7.htm

作者:Piner

一、 ASSM的基本情況

920以前,表的剩餘空間的管理與分配都是由連線列表freelist來完成的,因為freelist存在序列的問題,因此容易引起往往容易引起段頭的爭用與空間的浪費(其實這一點並不明顯),最主要的還是因為需要DBA 花費大量的精力去管理這些爭用並監控表的空間利用。

自動段空間管理(ASSM),它首次出現在Oracle920裡。有了ASSM,連線列表freelist被點陣圖所取代,它是一個二進位制的陣列,能夠迅速有效地管理儲存擴充套件和剩餘區塊(free block),因此能夠改善分段儲存本質,ASSM表空間上建立的段還有另外一個稱呼叫Bitmap Managed SegmentsBMB 段)。

讓我們看看點陣圖freelist是如何實現的。我會從使用區段空間管理自動引數建立tablespace開始:

Create tablespace demo
datafile '/ora01/oem/demo01.dbf '
size 5m
EXTENT MANAGEMENT LOCAL -- Turn on LMT
SEGMENT SPACE MANAGEMENT AUTO -- Turn on ASSM;

一旦你定義好了tablespace,那麼表和索引就能夠使用各種方法很容易地被移動到新的tablespace裡,帶有ASSM的本地管理tablespace會略掉任何為PCTUSEDNEXTFREELISTS所指定的值。

當表格或者索引被分配到這個tablespace以後,用於獨立物件的PCTUSED的值會被忽略,而Oracle9i會使用點陣圖陣列來自動地管理tablespace裡表格和索引的freelist。對於在LMTtablespace內部建立的表格和索引而言,這個NEXT擴充套件子句是過時的,因為由本地管理的tablespace會管理它們。但是,INITIAL引數仍然是需要的,因為Oracle不可能提前知道初始表格載入的大小。對於ASSM而言,INITIAL最小的值是三個塊。

新的管理機制用點陣圖來跟蹤或管理每個分配到物件的塊,每個塊有多少剩餘空間根據點陣圖的狀態來確定,如>75%,50%-75%,25%-50%<25%,也就是說點陣圖其實採用了四個狀態位來代替以前的pctused,什麼時候該利用該資料塊則由設定的pctfree來確定。

使用ASSM的一個巨大優勢是,點陣圖freelist肯定能夠減輕緩衝區忙等待(buffer busy wait)的負擔,這個問題在Oracle9i以前的版本里曾是一個嚴重的問題。

在沒有多個freelist的時候,每個Oracle表格和索引在表格的頭部都曾有一個資料塊,用來管理物件所使用的剩餘區塊,併為任何SQL插入宣告所建立的新資料行提供資料塊。當資料緩衝內的資料塊由於被另一個DML事務處理鎖定而無法使用的時候,緩衝區忙等待就會發生。當你需要將多個任務插入到同一個表格裡的時候,這些任務就被強制等待,而同時Oracle會在同時分派剩餘的區塊,一次一個。

有了ASSM之後,Oracle宣稱顯著地提高了DML併發操作的效能,因為(同一個)點陣圖的不同部分可以被同時使用,這樣就消除了尋找剩餘空間的序列化。根據Oracle的測試結果,使用點陣圖freelist會消除所有分段頭部(對資源)的爭奪,還能獲得超快的併發插入操作。

儘管ASSM顯示出了令人激動的特性並能夠簡化Oracle DBA的工作,但是Oracle9i的點陣圖分段管理還是有一些侷限性的:

·


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

相關文章