溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

assm/msmm

發(fā)布時間:2020-08-08 21:09:49 來源:ITPUB博客 閱讀:282 作者:不一樣的天空w 欄目:關(guān)系型數(shù)據(jù)庫
一、MSSM和ASSM如何工作:
MSSM是在每個段中以freelistl鏈方式管理段中空閑數(shù)據(jù)塊(塊中空閑區(qū)高于pctfree默認10%),當向一個空數(shù)據(jù)塊插入數(shù)據(jù)量達到數(shù)據(jù)塊大小1-pctfree時,即停止對該塊進行插入,而再分配另一個新數(shù)據(jù)塊進行插入,并將該塊從空閑列表freelist中移除。因此每個塊的利用率為1-pctfree,是為了以后發(fā)生update 操作此塊發(fā)生行遷移或行連接,增加磁盤I/O。
當數(shù)據(jù)塊內(nèi)數(shù)據(jù)被刪除到pctused所指定值(默認40%)時,即將該塊掛起到freelist上,使其可以接受新數(shù)據(jù)段插入。

在segment中若同一時刻發(fā)生多個insert,會引起freelist爭用,故一個segment中可存在多個freelist。freelist的多少決定了同一時刻在同一segment中進行insert操作的數(shù)量。多個freelist又可歸屬于不同的freelist group。

當grouplist=1時,第一個block為段頭塊,存放freelist及HWM信息,其余均為數(shù)據(jù)塊,第一個數(shù)據(jù)塊是從第二個塊開始插入的。
當freelist group >=2時,freelist從segment header內(nèi)分離出來,存在單獨的block中,每個freelist group占一個block,及真正的數(shù)據(jù)從1(段頭)+n (freelist group數(shù)據(jù))塊之后的塊開始。

ASSM(默認)以位圖BMB方式管理段中的空閑數(shù)據(jù)塊以避免freelist鏈表競爭,
當段空間<=1M,第一個塊為一級位圖塊,該塊管理2個分區(qū)內(nèi)那些塊,第二個塊為二級位圖塊,它指明所有一級位圖塊的位置,第三塊為段頭,存放所有區(qū)的編號、一級位圖塊和而及位圖塊。第17個塊也為位圖塊,管理第18~32個塊,即2個區(qū)。依次類推。
當當段空間>1M,前16個區(qū)與上述相同,從17個區(qū)開始2個一級位圖管理1個區(qū),因為一個一級位圖最多可管理64個塊

二、ASSM介紹
ASSM是Automatic Segment Space Management的縮寫。與ASSM相對是Manul Segment Space Management。只有在Locally Managed Tablespace中可以使用ASSM,system tablespace不可以使用ASSM。Locally managed tablespace和ASSm是11gR2的默認配置。

In a locally managed tablespace, following parameters are not used any more:

    next
    pctincrease
    minextents
    maxentents
    default

ASSM uses bitmap to manage space, whereas MSSM uses free list to manage free space.

在創(chuàng)建Tablespace時可以顯式指定:

    create tablespace tools  
    datafile '/ora01/dbfile/INVREP/tools01.dbf'  
    size 100m -- Fixed datafile size  
    extent management local -- Locally managed  
    uniform size 128k -- Uniform extent size  
    segment space management auto -- ASSM  

表空間tools雖然采用ASSM,但是空間超出100M后,依然需要手工增長?;蛘咴黾觗atafile。亦即,表空間存儲空間的上限是有數(shù)據(jù)文件的屬性決定的,不是ASSM。
ASSM的參數(shù)比MSSM少許多,一個Pctfree就夠了。以下參數(shù)不再需要

    pctused
    freelist
    freelist group

查看tablespace是如何管理的:

    select tablespace_name ,extent_management ,segment_space_management  
    from dba_tablespaces  
    order by tablespace_name;

三、assm補充
從Oracle 9i開始,管理段空間有兩種方法:手動段空間管理和自動段空間管理(Auto Segment Space Management,ASSM);

ASSM用位圖來跟蹤或管理每個分配到對象的塊,每個塊有多少剩余空間根據(jù)位圖的狀態(tài)來確定,如>75%,50%-75%,25%-50%和<25%,也就是說位圖其實采用了四個狀態(tài)位來代替以前的PCTUSED,什么時候該利用該數(shù)據(jù)塊則由設(shè)定的PCTFREE來確定。

對于ASSM,只需控制與空間使用相關(guān)的一個參數(shù):PCTFREE。創(chuàng)建段時也可以接受其他參數(shù),但是這些參數(shù)將被忽略。
在存儲/段 特征這方面,應(yīng)用于ASSM段的存儲設(shè)置只有:

BUFFER_POOL
PCTFREE
INITRANS
MAXTRANS(僅用于9i,在10g及以上版本中,所有段都會忽略這個參數(shù)。)

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

PCTFREE:該參數(shù)用于告訴oracle應(yīng)該在塊上保留多少空間來完成將來的更新,默認10%。如果自由空間百分比高于PCTFREE中指定的值,這個塊就被認為是自由的。

使用ASSM時,PCTFREE會限制能否將一個新行插入到一個塊中,但是它不會控制一個塊是否在FRRELIST上,因為ASSM根本不會使用FREELIST,在ASSM中PCTUSED也被忽略。

PCTFREE有3種設(shè)置:太高、太低、剛剛好。如果把塊的PCTFREE設(shè)置的太高,就會浪費空間。如果把PCTFREE設(shè)置為50%,而你從未更新數(shù)據(jù),那么每個塊都會浪費50%的空間。不過,在另一個表上,可能50%非常合理。如果行最初很小,現(xiàn)在想將行的大小加倍,但是倘若 PCTFREE設(shè)置太小,更新行時就會導(dǎo)致行遷移。


行遷移是指(rowmigration)是指由于某一行變得太大,無法再與其余的行一同放在創(chuàng)建這一行的塊中,而放到其它的塊中。

如果這種行遷移所占的比例相當大,而且有大量用戶在訪問這些行,訪問這些數(shù)據(jù)的速度就會開始變慢,因為額外的i/o以及與i/o相關(guān)的閂定都會增加訪問時間,緩沖區(qū)緩存的效率開始下降,因為需要緩存兩個塊,而如果沒有行遷移只需要緩存一個塊。另外表的大小和復(fù)雜性都有所增加。


如何設(shè)置PCTFREE(ASSM):
如果你插入了將要更新的大量數(shù)據(jù),而且這些更新會頻繁地增加行的大小,此時可以設(shè)置比較高的PCTFREE,因為這可以在插入后在塊上預(yù)留大量空間。
如果只想對表完成INSERT或DELETE,或者UPDATE只是對行大小影響比較小,此時可以設(shè)置比較低的PCTFREE。

 

相關(guān)信息可參考:

Oracle 自動段空間管理(ASSM:autosegment space management)

http://blog.csdn.net/tianlesoftware/article/details/4958989

Oracle ASSM三級位圖塊結(jié)構(gòu)

http://www.eygle.com/archives/2007/07/oracle_assm_level3_bmb.html

http://www.itpub.net/thread-99486-1-1.html

 






向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI