ASM元信息8號文件是磁盤空間使用目錄Used Space Directory,簡稱USD,它記錄了每個ASM磁盤組中每個磁盤的每個zone上被使用的AU數(shù)。一個磁盤的zone包含hot zone-熱區(qū)(磁盤外圈,譯者注)和cold zone-冷區(qū)(磁盤內圈,譯者注)。USD目錄為每個磁盤提供了一個條目,條目信息記錄了2個zone(COLD和HOT)的AU使用數(shù)。
USD結構是在11.2版本中引入的,并且與智能數(shù)據(jù)存放特性有關。USD元數(shù)據(jù)文件在ASM兼容性參數(shù)設置為11.2以上時會存在。
我們通過下面的查詢獲取每個磁盤組中USD目錄所在的AU。
SQL> break on Group# SQL> SELECT d.group_number "Group#", x.disk_kffxp "Disk#", x.xnum_kffxp "Extent", x.au_kffxp "AU",
d.name "Disk name" FROM x$kffxp x, v$asm_disk_stat d
WHERE x.group_kffxp=d.group_number and x.disk_kffxp=d.disk_number and x.number_kffxp=8 ORDER BY 1, 2; Group# Disk# Extent AU Disk name ------- ------ ------- ------ ------------ 1 0 0 51 ASMDISK5 1 0 51 ASMDISK6 2 0 0 41 ASMDISK1 2 0 39 ASMDISK3 3 0 38 ASMDISK4
檢查所有磁盤組中每個磁盤已經使用空間的分配情況。
SQL> SELECT group_number "Group#",
name "Disk name",
hot_used_mb "Hot (MB)",
cold_used_mb "Cold (MB)" FROM v$asm_disk_stat ORDER BY 1; Group# Disk name Hot (MB) Cold (MB) ------- ------------ ---------- ---------- 1 ASMDISK5 0 4187 ASMDISK6 0 4187 2 ASMDISK4 0 1138 ASMDISK2 0 1135 ASMDISK1 0 1139 ASMDISK3 0 1144
以上結果顯示每個磁盤的所有空間都被分配在了冷區(qū)中。下面使用kfed工具進一步查看。
$ kfed read /dev/oracleasm/disks/ASMDISK5 aun=51 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 26 ; 0x002: KFBTYP_USEDSPC ...
kfdusde[0].used[0].spare: 0 ; 0x000: 0x00000000 kfdusde[0].used[0].hi: 0 ; 0x004: 0x00000000 kfdusde[0].used[0].lo: 4134 ; 0x008: 0x00001026 kfdusde[0].used[1].spare: 0 ; 0x00c: 0x00000000 kfdusde[0].used[1].hi: 0 ; 0x010: 0x00000000 kfdusde[0].used[1].lo: 0 ; 0x014: 0x00000000 kfdusde[1].used[0].spare: 0 ; 0x018: 0x00000000 kfdusde[1].used[0].hi: 0 ; 0x01c: 0x00000000 kfdusde[1].used[0].lo: 4134 ; 0x020: 0x00001026 kfdusde[1].used[1].spare: 0 ; 0x024: 0x00000000 kfdusde[1].used[1].hi: 0 ; 0x028: 0x00000000 kfdusde[1].used[1].lo: 0 ; 0x02c: 0x00000000 kfdusde[2].used[0].spare: 0 ; 0x030: 0x00000000 kfdusde[2].used[0].hi: 0 ; 0x034: 0x00000000 kfdusde[2].used[0].lo: 0 ; 0x038: 0x00000000 kfdusde[2].used[1].spare: 0 ; 0x03c: 0x00000000 kfdusde[2].used[1].hi: 0 ; 0x040: 0x00000000 kfdusde[2].used[1].lo: 0 ; 0x044: 0x00000000
上面kfed工具的輸出顯示了ASM磁盤組一中有兩塊磁盤,因此只有kfdusde結構的前兩個條目被占用(kfdusde[0],kfdusde[1]),而且兩個條目都顯示所有的已分配空間都在冷區(qū)中。
查看磁盤組2的空間使用記錄:
$ kfed read /dev/oracleasm/disks/ASMDISK1 aun=41 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 26 ; 0x002: KFBTYP_USEDSPC ...
kfdusde[0].used[0].spare: 0 ; 0x000: 0x00000000 kfdusde[0].used[0].hi: 0 ; 0x004: 0x00000000 kfdusde[0].used[0].lo: 1092 ; 0x008: 0x00000444 kfdusde[0].used[1].spare: 0 ; 0x00c: 0x00000000 kfdusde[0].used[1].hi: 0 ; 0x010: 0x00000000 kfdusde[0].used[1].lo: 0 ; 0x014: 0x00000000 kfdusde[1].used[0].spare: 0 ; 0x018: 0x00000000 kfdusde[1].used[0].hi: 0 ; 0x01c: 0x00000000 kfdusde[1].used[0].lo: 1093 ; 0x020: 0x00000445 kfdusde[1].used[1].spare: 0 ; 0x024: 0x00000000 kfdusde[1].used[1].hi: 0 ; 0x028: 0x00000000 kfdusde[1].used[1].lo: 0 ; 0x02c: 0x00000000 kfdusde[2].used[0].spare: 0 ; 0x030: 0x00000000 kfdusde[2].used[0].hi: 0 ; 0x034: 0x00000000 kfdusde[2].used[0].lo: 1098 ; 0x038: 0x0000044a kfdusde[2].used[1].spare: 0 ; 0x03c: 0x00000000 kfdusde[2].used[1].hi: 0 ; 0x040: 0x00000000 kfdusde[2].used[1].lo: 0 ; 0x044: 0x00000000 kfdusde[3].used[0].spare: 0 ; 0x048: 0x00000000 kfdusde[3].used[0].hi: 0 ; 0x04c: 0x00000000 kfdusde[3].used[0].lo: 1094 ; 0x050: 0x00000446 kfdusde[3].used[1].spare: 0 ; 0x054: 0x00000000 kfdusde[3].used[1].hi: 0 ; 0x058: 0x00000000 kfdusde[3].used[1].lo: 0 ; 0x05c: 0x00000000 kfdusde[4].used[0].spare: 0 ; 0x060: 0x00000000 kfdusde[4].used[0].hi: 0 ; 0x064: 0x00000000 kfdusde[4].used[0].lo: 0 ; 0x068: 0x00000000 kfdusde[4].used[1].spare: 0 ; 0x06c: 0x00000000 kfdusde[4].used[1].hi: 0 ; 0x070: 0x00000000 kfdusde[4].used[1].lo: 0 ; 0x074: 0x00000000 ...
磁盤組二有四個磁盤,有四個條目被占用,并且每個磁盤已分配的所有空間確實都被分配在了冷區(qū)。
我們來創(chuàng)建一個磁盤組模板,模板中指定基于此模板創(chuàng)建的文件都要位于磁盤的熱區(qū)。
SQL> alter diskgroup DATA add template HOTFILE attributes (HOT);
Diskgroup altered.
這個特性需要磁盤組compatible.rdbms屬性設置為11.2或以上。
現(xiàn)在創(chuàng)建一個datafile,并放置于熱區(qū)。
SQL> create tablespace T1_HOT datafile '+DATA(HOTFILE)' size 50M;
Tablespace created.
再次運行上面的查詢,檢查空間使用。
SQL> SELECT group_number "Group#",
name "Disk name",
hot_used_mb "Hot (MB)",
cold_used_mb "Cold (MB)" FROM v$asm_disk_stat ORDER BY 1; Group# Disk name Hot (MB) Cold (MB) ---------- ------------------------------ ---------- ---------- 1 ASMDISK5 0 4187 ASMDISK6 0 4187 2 ASMDISK4 13 1152 ASMDISK2 12 1153 ASMDISK1 13 1152 ASMDISK3 13 1153
以上結果顯示,51MB的空間(文件本身占用50MB,1MB用于文件頭)被分配在熱區(qū),并且分布在磁盤組的所有磁盤中。
我們還可以將一個已經存在的數(shù)據(jù)文件移到熱區(qū),我們來通過asmcmd里的find命令找到磁盤組DATA里的所有數(shù)據(jù)文件:
$ asmcmd find --type datafile +DATA "*" +DATA/BR/DATAFILE/EXAMPLE.269.769030517 +DATA/BR/DATAFILE/NOT_IMPORTANT.273.771795255 +DATA/BR/DATAFILE/SYSAUX.257.769030245 +DATA/BR/DATAFILE/SYSTEM.256.769030243 +DATA/BR/DATAFILE/T1_HOT.274.772054033 +DATA/BR/DATAFILE/TRIPLE_C.272.771794469 +DATA/BR/DATAFILE/TRIPLE_M.271.771793293 +DATA/BR/DATAFILE/UNDOTBS1.258.769030245 +DATA/BR/DATAFILE/USERS.259.769030245
現(xiàn)在我們把undo表空間的數(shù)據(jù)文件移入熱區(qū)。
SQL> alter diskgroup DATA modify file '+DATA/BR/DATAFILE/UNDOTBS1.258.769030245' attributes (HOT);
Diskgroup altered.
這個命令會觸發(fā)一次磁盤組DATA的rebalance,因為文件的extent都需要移動到磁盤的熱區(qū)。當rebalance結束時,查詢發(fā)現(xiàn)熱區(qū)的數(shù)據(jù)增多了。
譯者注:雖然是磁盤組的rebalance,但是速度上會比較快,只取決于undo文件的大小,因為其他文件本身已經是rebalance狀態(tài),只需要做一次快速的檢查即可,并沒有真正的大量的extent需要做移動。
SQL> SELECT group_number "Group#",
name "Disk name",
hot_used_mb "Hot (MB)",
cold_used_mb "Cold (MB)" FROM v$asm_disk_stat ORDER BY 1; Group# Disk name Hot (MB) Cold (MB) ---------- ------------------------------ ---------- ---------- 1 ASMDISK5 0 4187 ASMDISK6 0 4187 2 ASMDISK4 40 1125 ASMDISK2 39 1126 ASMDISK1 39 1126 ASMDISK3 39 1127
ASM元信息8號文件即磁盤空間使用目錄,記錄了每個ASM磁盤組上每塊盤每一個zone的AU使用數(shù)。它為11.2版本中智能數(shù)據(jù)存放特性提供支持。這個特性的一個可行的用途在于我們可以控制數(shù)據(jù)在冷區(qū)、熱區(qū)的存放。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業(yè)目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。