ASM 翻譯系列第八彈:ASM Internal ASM file extent map

沃趣科技發表於2016-06-30
原作者:Bane Radulovic
譯者:   莊培培
稽核:   魏興華


當ASM建立一個檔案時(例如資料庫例項要求建立一個資料檔案),它會以extent為單位分配空間。一旦檔案被建立,ASM會傳遞extent對映表給資料庫例項,後續資料庫例項能在不和ASM例項互動的情況下訪問這個檔案。如果一個檔案的extent需要被重新定位,比如磁碟組進行rebalance操作,ASM會告知資料庫例項關於extent對映表的變更。

可以透過查詢ASM例項的X$KFFXP檢視來獲取ASM檔案extent對映表的內容。X$KFFXP檢視中的每一行對應著所有處於mount狀態磁碟組中每一個檔案的每一個物理extent的資訊。

譯者注:1)網路上有不少關於X$KFFXP檢視的解釋,有些資訊過於陳舊,需要指出,它記錄的每一條記錄都代表的是物理extent的資訊,而非AU資訊,X$KFFXP檢視的SIZE_KFFXP欄位,代表了此extent是由幾個AU組成的,在啟用11G可變extent特性後會出現SIZE_KFFXP大於1的情況,具體更多資訊參考本系列的第一篇文章。2)X$KFFXP這裡翻譯成了X$KFFXP檢視,只是為了便於理解,它的本質是一個記憶體的資料結構(fixed table),其資料不在buffer_cache中。

X$KFFXP檢視的重要欄位包括:

GROUP_KFFXP 磁碟組編號。注意磁碟組編號不是恆久不變的,每次磁碟組被mount時都可能會不一樣。等同於V$ASM_DISKGROUP.GROUP_NUMBER欄位。

NUMBER_KFFXP 檔案序號。等同於 V$ASM_FILE.FILE_NUMBER欄位。 注意,ASM的檔案序號不同於資料庫內的資料檔案序號,不要把兩個概念搞混了。小於256的ASM檔案序號是保留給ASM後設資料檔案使用的。

INCARN_KFFXP 檔案版本號。當一個ASM檔案序號被一個新檔案重用時,檔案版本號會發生改變。等同於V$ASM_FILE.INCARNATION欄位。注意,ASM檔案是以檔案序號.版本號的方式結尾。

XNUM_KFFXP 虛擬extent序號。external冗餘磁碟組的虛擬extent序號與物理extent序號一致。 normal冗餘磁碟組的虛擬extent序號透過將物理extent序號除於2得到.high冗餘磁碟組的虛擬extent序號透過將物理extent序號除於3得到.

PXN_KFFXP 物理extent序號。一個檔案的物理extent序號都以數字0開始,順序遞增。

LXN_KFFXP 虛擬extent中物理extent的序號。 0 為 primary extent, 1 為 secondary extent, 2 為 third copy of the extent。

DISK_KFFXP 物理磁碟序號。等同於V$ASM_DISK.DISK_NUMBER。

AU_KFFXP AU序號,磁碟維度的AU編號,每個磁碟從0開始。

在ASM例項中透過以下查詢,能夠看出磁碟組3內的ASM後設資料檔案的檔案序號,名字和AU數量。

$ sqlplus / as sysasm
SQL> select NUMBER_KFFXP "ASM file number", DECODE (NUMBER_KFFXP,
1, 'File directory', 2, 'Disk directory', 3, 'Active change directory', 4, 'Continuing operations directory',
5, 'Template directory', 6, 'Alias directory', 7, 'ADVM file directory', 8, 'Disk free space directory',
9, 'Attributes directory', 10, 'ASM User directory', 11, 'ASM user group directory', 12, 'Staleness directory',
253, 'spfile for ASM instance', 254, 'Stale bit map space registry ', 255, 'Oracle Cluster Repository registry') "ASM metadata file name",
count(AU_KFFXP) "Allocation units"
from X$KFFXP
where GROUP_KFFXP=3 and NUMBER_KFFXP<256
group by NUMBER_KFFXP
order by 1;

ASM file number ASM metadata file name             Allocation units
--------------- ---------------------------------- ----------------
              1 File directory                                    3
              2 Disk directory                                    3
              3 Active change directory                          69
              4 Continuing operations directory                   6
              5 Template directory                                3
              6 Alias directory                                   3
              8 Disk free space directory                         3
              9 Attributes directory                              3
             12 Staleness directory                               3
            253 spfile for ASM instance                           2
            254 Stale bit map space registry                      3
            255 Oracle Cluster Repository registry              135

12 rows selected.
SQL>

透過以上查詢結果可以發現,這個磁碟組並沒有包含所有型別的後設資料檔案(例如第十號和第十一號檔案)。一個有意思的事情是,除了ASM例項的spfile,每個檔案至少佔用3個AU,對於這一點更多詳細資訊我們會在其他章節介紹。

我們再來以一個資料庫控制檔案為例檢視下它的extent對映表

第1步,查詢DATA磁碟組內所有的資料庫控制檔案(以Grid所屬的OS使用者身份執行asmcmd命令)

$ asmcmd find --type controlfile +DATA "*"
+DATA/DBM/CONTROLFILE/Current.256.738247649
+DATA/BR/CONTROLFILE/Current.299.748434267
$

第2步,檢查DATA磁碟組的磁碟組序號(連線到asm例項)

$ sqlplus / as sysasm
SQL> select GROUP_NUMBER from V$ASM_DISKGROUP where NAME='DATA';

GROUP_NUMBER
------------
1

SQL>

第3步,檢查磁碟組1中ASM 256號檔案(+DATA/DBM/CONTROLFILE/Current.256.738247649)的extent對映表

SQL> select XNUM_KFFXP "Virtual extent", PXN_KFFXP "Physical extent", LXN_KFFXP "Extent copy", DISK_KFFXP "Disk", AU_KFFXP "Allocation unit"
from X$KFFXP
where GROUP_KFFXP=1 and NUMBER_KFFXP=256 and XNUM_KFFXP<>2147483648
order by 1,2;

Virtual extent Physical extent Extent copy       Disk Allocation unit
-------------- --------------- ----------- ---------- ---------------
             0               0           0         20               5
             0               1           1         29            1903
             0               2           2          6              82
             1               3           0         22               6
             1               4           1         31               8
             1               5           2          9               3
             2               6           0         30               8
             2               7           1         23            1907
             2               8           2          7              63
             3               9           0         26               2
             3              10           1         16            1904
             3              11           2          6               4
...
            39             117           0         25            1913
            39             118           1         15            1906
            39             119           2          3              27

120 rows selected.


SQL>

以上輸出可以看出這個控制檔案是三路映象,每個虛擬extent對應三個物理extent,還可以看出這個檔案每個AU的實際位置。


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

相關文章