asm元資訊8号檔案是磁盤空間使用目錄used space directory,簡稱usd,它記錄了每個asm磁盤組中每個磁盤的每個zone上被使用的au數。一個磁盤的zone包含hot zone-熱區(磁盤外圈,譯者注)和cold zone-冷區(磁盤内圈,譯者注)。usd目錄為每個磁盤提供了一個條目,條目資訊記錄了2個zone(cold和hot)的au使用數。
usd結構是在11.2版本中引入的,并且與智能資料存放特性有關。usd中繼資料檔案在asm相容性參數設定為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
以上結果顯示每個磁盤的所有空間都被配置設定在了冷區中。下面使用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]),而且兩個條目都顯示所有的已配置設定空間都在到了冷區中。
檢視磁盤組2的空間使用記錄
$ kfed read /dev/oracleasm/disks/asmdisk1 aun=41 | more
kfdusde[0].used[0].lo: 1092 ; 0x008: 0x00000444
kfdusde[1].used[0].lo: 1093 ; 0x020: 0x00000445
kfdusde[2].used[0].lo: 1098 ; 0x038: 0x0000044a
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
磁盤組二有四個磁盤,有四個條目被占用,并且每個磁盤的已配置設定的所有空間确實都被配置設定在了冷區。
我們來建立一個磁盤組模闆,模闆中指定基于此模闆建立的檔案都要位于磁盤的熱區。
sql> alter diskgroup data add template hotfile attributes (hot);
diskgroup altered.
這個特性需要磁盤組compatible.rdbms屬性設定為11.2或以上。
現在建立一個datafile,并放置于熱區。
sql> create tablespace t1_hot datafile '+data(hotfile)' size 50m;
tablespace created.
再次運作上面的查詢,檢查空間使用。
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用于檔案頭)被配置設定在熱區,并且分布在磁盤組的所有磁盤中。
我們還可以将一個已經存在的資料檔案移到熱區,我們來通過asmcmd裡的find指令找到磁盤組data裡的所有資料檔案:
$ 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
現在我們把undo表空間的資料檔案移入熱區。
sql> alter diskgroup data modify file '+data/br/datafile/undotbs1.258.769030245' attributes (hot);
這個指令會觸發一次磁盤組data的rebalance,因為檔案的extent都需要移動到磁盤的熱區。當rebalance結束時,查詢發現熱區的資料增多了。
譯者注:雖然說是磁盤組的rebalance,但是速度上會比較快,隻取決于undo檔案的大小,因為其他檔案本身已經是rebalance狀态,隻需要做一次快速的檢查即可,并沒有真正的大量的extent需要做移動。
2 asmdisk4 40 1125
asmdisk2 39 1126
asmdisk1 39 1126
asmdisk3 39 1127
asm元資訊8号檔案即磁盤空間使用目錄,記錄了每個asm磁盤組上每塊盤每一個zone的au使用數。它為11.2版本中智能資料存放特性提供支援。這個特性的一個可行的用途在于我們可以控制資料在冷區、熱區的存放。
譯者注:對于做了raid或是通過存儲輸出來的虛拟盤,磁盤的熱區和冷區将會失去作用,同樣,對于ssd盤,也是這樣。
<b></b>
<b>本文來自雲栖社群合作夥伴“dbgeek”</b>