1. 程式人生 > >本地管理表空間和字典管理表空間的特點,ASSM有什麼特點

本地管理表空間和字典管理表空間的特點,ASSM有什麼特點

字典管理表空間(Dictionary-Managed Tablespace簡稱DMT),8i以前包括以後都還可以使用的一種表空間管理模式,通過資料字典管理表空間的空間使用。

Oracle使用兩個字典來記錄Extents的使用情況:SYS.FET$記錄空閒的Extents,SYS.UET$記錄使用的Extents。在分配和釋放分割槽時,都要修改者兩個字典。屬於DML操作,存在競爭,每個動作都是一個事務,會產生UNDO記錄。進行空間合併時也要同樣操作方法。效率低下

本地管理表空間(Locally Managed Tablespace簡稱LMT),8i以後出現的一種新的表空間的管理模式,通過點陣圖來管理表空間的空間使用。

通過資料標頭檔案中的一個位圖來記錄本檔案中資料庫的使用情況,每個BIT代表資料塊,通過改變bit值來表示Extents的分配使用或釋放,不屬於DML操作,也不會產生UNDO記錄,可以自動跟蹤連續的空閒空間。帶來的優勢:不需要使用字典SYS.FET$和SYS.UET$上的遞迴SQL呼叫;減少資料字典的競爭;不會產生UNDO記錄;不再需要週期性合併操作。

例:建立了一個本地管理的表空間,區間統一大小分配為64K
SQL> create tablespace demo  
    datafile '/ora01/oem/oemdemo01.dbf' size 10m  
    extent management local uniform size 64k; 

自動段空間管理(ASSM)

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

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

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會略掉任何為PCTUSED、NEXT和FREELISTS所指定的值。

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

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

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