ASM 翻譯系列第三十一彈:瞭解ASM檔案的空間分配
原作者:Bane Radulovic
譯者: 邱大龍
稽核: 魏興華
DBGeeK社群聯合出品
How many allocation units per file
本文主要是對ASM檔案的空間分配進行一些探討和研究。
ASM空間分配的最小單位是AU,預設的AU size是1MB,但在Exadata下AU 的預設大小是4MB。
ASM檔案的空間分配是以extent為單位,每一個extent是由一個或多個AU組成,在11.2版本,前20000個extent,每一個extent由1個AU組成,接下來的20000個extent,每一個由4個AU組成,再超出的extent,每一個由16個AU組成。這個特性被叫做可變extent。而在11.1版本,extent的增長則遵循的是1-8-64倍AU的方式。在版本10,可變extent這個特性還沒出現,因此所有的extent的大小都是1個AU。
Bytes vs space
檢視V$ASM_FILE中,有兩列是關於空間分配的:BYTES 和 SPACE,它們的定義如下:
-
BYTES - 檔案的大小
-
SPACE - 檔案實際佔用的ASM空間的大小
這兩列的定義有一些細微的差異,但是這兩列的數值差異可能是非常大的,下面我們就來實際的看一下,首先交代一下我的測試環境,ASM和DB的版本為11.2.0.3,使用ASMLIB方式管理的磁碟:
可以透過如下的查詢來簡單的瞭解我的環境中磁碟組data的基本情況,例如AU的大小,冗餘的級別,我的資料檔案大多都位於這個磁碟組中。
SQL> select NAME, GROUP_NUMBER, ALLOCATION_UNIT_SIZE/1024/1024 "AU size (MB)", TYPE
from V$ASM_DISKGROUP
where NAME='DATA';
NAME GROUP_NUMBER AU size (MB) TYPE
---------------- ------------ ------------ ------
DATA 1 1 NORMAL
現在建立一個小於60個extent的“小”檔案和一個大於60個extent的“大”檔案。
SQL> create tablespace T1 datafile '+DATA' size 10 M;
Tablespace created.
SQL> create tablespace T2 datafile '+DATA' size 100 M;
Tablespace created.
Get the ASM file numbers for those two files:
SQL> select NAME, round(BYTES/1024/1024) "MB" from V$DATAFILE;
NAME MB
------------------------------------------ ----------
...
+DATA/br/datafile/t1.272.818281717 10
+DATA/br/datafile/t2.271.818281741 100
“小"檔案的ASM檔案號是272,“大”檔案的ASM檔案號是271。
接著我們透過前面提到的V$ASM_FILE檢視來獲取這兩個檔案的空間佔用資訊:
SQL> select FILE_NUMBER, round(BYTES/1024/1024) "Bytes (AU)", round(SPACE/1024/1024) "Space (AUs)", REDUNDANCY
from V$ASM_FILE
where FILE_NUMBER in (271, 272) and GROUP_NUMBER=1;
FILE_NUMBER Bytes (AU) Space (AUs) REDUND
----------- ---------- ----------- ------
272 10 22 MIRROR
271 100 205 MIRROR
bytes欄位顯示了檔案的實際大小,我們小檔案的大小為10MB,因此佔用了10個AU(AU的size為1MB),小檔案實際佔用的ASM空間有22個AU,其中10個AU是實際的資料檔案,1個AU為檔案頭,由於檔案是映象的,因此檔案真正佔用的ASM空間為:(10+1)*2=22個AU。
對於“大”檔案,bytes欄位顯示了檔案的實際大小為100MB也就是100個AU,到現在為止一切推論都跟原理相符,但是接著我們發現大檔案的ASM空間佔用為205個AU,按照上面的計算應該有202個AU才正確,多出來的3個AU是如何來的?接下來我們就來一窺究竟。
ASM space
下面的查詢(在ASM例項上執行)展示了ASM 271號檔案extent的分佈情況:
SQL> select XNUM_KFFXP "Virtual extent", PXN_KFFXP "Physical extent", DISK_KFFXP "Disk number", AU_KFFXP "AU number"
from X$KFFXP
where GROUP_KFFXP=1 and NUMBER_KFFXP=271
order by 1,2;
Virtual extent Physical extent Disk number AU number
-------------- --------------- ----------- ----------
0 0 3 1155
0 1 0 1124
1 2 0 1125
1 3 2 1131
2 4 2 1132
2 5 0 1126
...
100 200 3 1418
100 201 1 1412
2147483648 0 3 1122
2147483648 1 0 1137
2147483648 2 2 1137
205 rows selected.
由於ASM檔案是做了映象的,我們可以看到每一個虛擬extent有兩個物理extent,而且位於不同的磁碟(其實還位於不同的failgroup),但是最有趣的是查詢結果的最後三行,虛擬extent的號是2147483648,做了3副本。我們可以透過kfed工具看下這個extent的內容,使用kfed我們首先需要知道ASM磁碟的名稱。
透過如下查詢獲得ASM磁碟的名稱:
SQL> select DISK_NUMBER, PATH
from V$ASM_DISK
where GROUP_NUMBER=1;
DISK_NUMBER PATH
----------- ---------------
0 ORCL:ASMDISK1
1 ORCL:ASMDISK2
2 ORCL:ASMDISK3
3 ORCL:ASMDISK4
我們來檢查下這些AU中具體存放的內容:
$ kfed read /dev/oracleasm/disks/ASMDISK4 aun=1122 | grep type
kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT
$ kfed read /dev/oracleasm/disks/ASMDISK1 aun=1137 | grep type
kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT
$ kfed read /dev/oracleasm/disks/ASMDISK3 aun=1137 | grep type
kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT
這些額外的AU存放著ASM的後設資料,更具體的講,他們儲存了extent map資訊,而這些extent map資訊不能夠存放在ASM的檔案目錄塊中了,因為ASM檔案目錄塊中,只能存放60個extent的條目,一旦超出這個值,那麼就要有額外的地方來記錄這個資訊。由於這屬於ASM的後設資料,因此被做了3副本(雖然是一個normal冗餘的磁碟組),因此每一個大檔案都會有這麼3個額外的AU,但在一個external冗餘的磁碟組中,僅僅只會有這麼一個額外的AU,不會被做複製。
Conclusion
ASM空間的佔用取決於2個因素:檔案的實際大小和磁碟組的冗餘度。
在external冗餘的磁碟組中,空間的佔用:檔案實際大小+1個AU(檔案頭)+1個額外的AU(如果檔案大於60個AU)。
在一個normal冗餘的磁碟組中,空間的佔用:兩倍的檔案實際大小+2個AU(檔案頭)+3個額外的AU(如果檔案大於60個AU)
在一個high冗餘的磁碟組中,空間的佔用:三倍的檔案實際大小+3個AU(檔案頭)+3個額外的AU(如果檔案大於60個AU)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2134081/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASM 翻譯系列第十一彈:高階知識 Offline or drop?ASM
- ASM 翻譯系列第十三彈:ASM 高階知識 - Forcing the issueASM
- ORACLE ASM的SSD磁碟空間回收分析OracleASM
- ORACLE ASM磁碟組空間溢位OracleASM
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- ASM叢集檔案系統ACFS(ASM Cluster File System)ASM
- Oracle:ASM & 密碼檔案OracleASM密碼
- LWN 文章翻譯 - 名字空間實作系列
- ASM單例項安裝後,需要手動設定ASM的引數檔案ASM單例
- oracle RAC+DG 擴容ASM和表空間(Linux)OracleASMLinux
- ASM空間爆滿導致資料庫掛起ASM資料庫
- ASM磁碟空間假裝耗盡,ORA-15041: diskgroup space exhaustedASM
- ORACLE RAC ASM資料檔案遷移OMF檔案報錯ORA-01276解決OracleASM
- 將spfile從ASM裡遷移到檔案系統ASM
- ASM有自己的引數、密碼、alert、監聽檔案ASM密碼
- IDA批量處理VirusShare樣本獲得asm檔案與bytes檔案ASM
- 12c複製 RAC ASM中的密碼檔案到檔案系統ASM密碼
- xbbed一鍵讀取ASM block到檔案系統ASMBloC
- [20191128]11GR2 asm例項audit檔案.txtASM
- Oracle使用RMAN將普通資料檔案轉成ASMOracleASM
- Oracle Linux 7使用syslog來管理Oracle ASM的審計檔案OracleLinuxASM
- 【ASM】Oracle asm刪除磁碟組注意事項ASMOracle
- 【ASM】ASM磁碟頭被重寫,如何修復ASM
- gnu inline asminlineASM
- goldengate + asm + racGoASM
- 【ASM】ASM啟動無法找到spfile問題原因ASM
- 從定位資料塊所在ASM磁碟到ASM strippingASM
- Oracle 12c的DG自動同步密碼檔案--ASM 新特性:共享密碼檔案Oracle密碼ASM
- ASM磁碟組限制ASM
- 4.5.1.1 srvctl add asmASM
- ASM(Automatic Storage Management)ASM
- Android Transform + ASM 初探AndroidORMASM
- ASM Metadata Dump UtilityASM
- RAC+ASM+DATAGUARDASM
- ASM Fast Mirror ResyncASMAST
- QT TS檔案翻譯,部分不能正確被翻譯QT
- Oracle ASM AMDU工具的使用OracleASM
- 遇到ASM的兩個BUGASM
- linux下如何使用檔案來模擬硬碟進行ASM測試Linux硬碟ASM