關於ASM的一些理論

kingsql發表於2019-01-22

ASM Allocation Units

在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。


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。


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中。


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

相關文章