在asm磁盤組中,最基本空間配置設定機關是allocation unit,簡稱au,每個asm的磁盤在初始化後都會被切割成一個一個的au。
當磁盤組建立時,可以通過設定au_size的屬性值,來指定au的大小(在11.1版本以後),au的大小可以是1,2,4,8,16,32,64mb,如果不指定au的大小,預設值是1mb(exadata下為4mb)。
au size是磁盤組的屬性(不是磁盤的屬性,不是asm執行個體的屬性),是以每一個asm磁盤組都可以有自己的au size值。
asm extents
一個或多個au組成一個extent,一個或多個asm extent組成了一個asm的檔案,是以一個asm檔案邏輯上是由extent組成的。
我們需要區分實體extent和虛拟extent,一個虛拟extent或者說extent set,在外部備援的磁盤組中,是由一個實體extent組成,在normal備援的磁盤組中,是由至少2個實體extent組成,在一個high備援的磁盤組中,由至少3個實體extent組成。
在asm 11.1版本之前,extent的大小是固定的,在asm 11.1版本之後,出現了可變extent,可變extent的出現是為了更好的支援大資料檔案,減少對asm和資料庫執行個體的sga要求、提升建立檔案和打開檔案等操作的性能,初始化的extent大小等于磁盤組的au_size設定值,随着一個檔案配置設定的extent越來越多,extent的size會按照4或16倍的au_size增大。這個特性在檔案建立或者resize的時候自動起作用,當然asm磁盤組的屬性值compatible.asm 和compatible.rdbms要設定為大于等于11.1。
一個檔案的extent大小變化規律遵循如下方式:
一個檔案的前20000個extent set,extent的size等于磁盤組的au_size的設定值。
接下來的20000個extent set,extent的size等于磁盤組的au_size*4。
如果一個檔案的總extent set數多于40000個,那麼後面所有的extent的size等于磁盤組的au_size*16。
這個可變extent特性有一個煩人的bug 8898852,更多資訊可以參考mos 965751.1。
譯者注:我很懷疑可變extent能起到的效果,因為大部分使用者添加資料檔案時,一般會指定資料檔案的大小,假如au_size設定成1m,那麼隻有大于20g的資料檔案才會有一些extent的大小為4mb,而就我接觸到的dba來說,可能大部分dba都會把資料檔案的大小設定成20g左右。還有就是雖然oracle中有bigfile表空間,但是用的人并不多。
asm mirroring
asm的資料鏡像功能用來保護資料的完整性,它是通過對一份資料在不同的磁盤多存儲一份資料副本來做到這一點。當一個asm的磁盤組被建立時,asm管理者可以指定磁盤組的鏡像方式:
· external – 不提供鏡像保護
· normal – 2副本
· high – 3副本
asm鏡像的粒度是extent而非磁盤或者block,asm中的鏡像是通過對組成的每一個asm檔案的extent做鏡像來實作的。在asm中,我們可以指定每個檔案的備援級别。例如,一個在normal備援的磁盤組中的檔案,它的每一個extent可能會被鏡像一次(預設行為),另一個檔案,在相同的磁盤組,可能會被鏡像二次,也就是三副本(假設磁盤組中至少有3個failgroup),事實上,asm中繼資料檔案在normal備援的磁盤組中就是做的三副本,這裡同樣需要磁盤組中至少要有3個failgroup。
譯者注:在normal備援的磁盤組中,會有檔案被鏡像兩次,也就是三副本,對于這點不必懷疑,這些檔案都是asm的中繼資料檔案,在後續的文章中,我們會多次看到這種現象。
asm failgroups
一個asm磁盤組可以邏輯上被劃分為一個一個的failgroup,failgroup需要在磁盤組建立指定,如果我們在建立磁盤組時,不指定failgroup ,那麼asm會自動把每一個磁盤作為一個failgroup,這一點可能在exadata上會不一樣,exadata 下所有來自相同存儲節點的磁盤會自動放入到一個failgroup ,即使你沒有指定failgroup。
normal備援的磁盤組要求至少2個failgroup,high備援的磁盤組要求至少3個failgroup,external備援模式的磁盤組不要求有failgroup。
當一個extent配置設定給一個具有雙副本的檔案時,asm會配置設定一個primary copy 和 一個 mirror copy,primary copy存儲在一個磁盤,而mirror copy會存儲在另外一個不同failgroup的磁盤上。
當向asm磁盤組添加磁盤時,failgroup可以手工指定,asm會智能的把磁盤添加到正确的failgroup中。
<b>本文來自雲栖社群合作夥伴“dbgeek”</b>