關於ASM的一些理論
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於OT分類的一些處理
- 關於“學習金字塔理論”的所思所想
- 關於Oracle 10g ASM磁碟大小的限制Oracle 10gASM
- 一些實用的職場理論
- 關於“斯金納箱”及相關理論在遊戲設計中應用的討論遊戲設計
- 關於angularJS的一些用法AngularJS
- 關於table的一些操作
- 關於position的一些理解
- 關於CodeReview的一些思考View
- 關於撲克牌的一些討論——《Fluent Python 2》讀書筆記Python筆記
- 關於實現論壇的回覆評論
- 關於 performSelector 的一些小探討performSelector
- 關於 Masonry 的一些思考(下)
- 《關於MySQL的一些騷操作》MySql
- 關於秋招的一些真相
- 關於一些奇葩的相容bug
- 關於Redis的一些小問題Redis
- 關於Canvas的一些經驗Canvas
- 關於position定位的一些理解
- 關於“運維”的一些思索運維
- 關於fsdb的一些記錄
- 深度學習相關理論深度學習
- 關於Jpa和Mybatis的一些看法MyBatis
- 關於 Vue webpack 模板的一些改造VueWeb
- 關於Swift中Properties的一些理解Swift
- [譯] 關於 HTTP/3 的一些心得HTTP
- 關於with 臨時表 as的一些用法
- 關於Dart中Future的一些理解Dart
- 關於區塊鏈的一些澄清區塊鏈
- 關於介面設計的一些反思
- 關於Mysql使用的一些總結MySql
- 關於全民答題的一些反思
- 關於最近面試的一些心得面試
- 關於 Spring-WebFlux 的一些想法SpringWebUX
- 關於dmserver使用的一些竅門Server
- MySql關於鎖的一些總結MySql
- 關於Base64的一些理解
- 關於學習的一些建議