ASM的元數據9號文件,是ASM屬性目錄,包含了磁盤組的屬性信息。屬性目錄只有在磁盤組的compatible.asm屬性設置為11.1或以上時才會存在。
直到ASM 11.1版本開始,才引入了磁盤組屬性的概念,它被用來細粒度地調整磁盤組屬性。有些屬性只能在磁盤組創建時指定(如au_size),有些屬性可以在任何時候指定(如disk_repair_time)。有些屬性保存在磁盤頭中(如au_size),有些屬性被存儲在【成員關系和狀態表】中或磁盤頭中,這取決于ASM的版本。
譯者注:成員關系和狀態表即partnership and status table的信息請參考本系列的【partnership and status table】篇的詳細介紹
大多數屬性存放在屬性目錄并且可以通過查詢v$asm_attribute視圖獲得。我們通過查詢這個視圖來看下我的所有磁盤組的屬性信息:
SQL> SELECT g.name "Group", a.name "Attribute", a.value "Value" FROM v$asm_diskgroup g, v$asm_attribute a WHERE g.group_number=a.group_number and a.name not like 'template%'; Group Attribute Value ----- ----------------------- ---------------- ACFS disk_repair_time 3.6h
au_size 1048576 access_control.umask 026 access_control.enabled TRUE cell.smart_scan_capable FALSE compatible.advm 11.2.0.0.0 compatible.rdbms 11.2 compatible.asm 11.2.0.0.0 sector_size 512 DATA access_control.enabled TRUE cell.smart_scan_capable FALSE compatible.rdbms 11.2 compatible.asm 11.2.0.0.0 sector_size 512 au_size 1048576 disk_repair_time 3.6h
access_control.umask 026 SQL>
一個我們可以在任何時候修改的屬性是disk repair time。以下是通過asmcmd修改DATA磁盤組的命令:
$ asmcmd setattr -G DATA disk_repair_time '8.0h' $ asmcmd lsattr -lm disk_repair_time
Group_Name Name Value RO Sys
ACFS disk_repair_time 3.6h N Y DATA disk_repair_time 8.0h N Y
$
前文提到,屬性目錄位于ASM元數據9號文件。現在我們定位到2號磁盤組的屬性目錄。
SQL> SELECT 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 d.group_number=2 and x.number_kffxp=9 ORDER BY 1, 2; Disk# Extent AU Disk name ----- ------ ---- --------- 0 0 1146 ASMDISK1 1 0 1143 ASMDISK2 2 0 1150 ASMDISK3
SQL>
現在用kfed工具進行查看。
$ kfed read /dev/oracleasm/disks/ASMDISK3 aun=1150 | more
kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 23 ; 0x002: KFBTYP_ATTRDIR ... kfede[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0 kfede[0].entry.hash: 0 ; 0x028: 0x00000000 kfede[0].entry.refer.number: 4294967295 ; 0x02c: 0xffffffff kfede[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0 kfede[0].name: disk_repair_time ; 0x034: length=16 kfede[0].value: 8.0h ; 0x074: length=4 ...
kfede[i]字段包含了磁盤組屬性的名稱和值。我們結合egrep命令查看所有的ASM磁盤組的屬性值:
$ kfed read /dev/oracleasm/disks/ASMDISK3 aun=1150 | egrep "name|value" kfede[0].name: disk_repair_time ; 0x034: length=16 kfede[0].value: 8.0h ; 0x074: length=4 kfede[1].name: _rebalance_compact ; 0x1a8: length=18 kfede[1].value: TRUE ; 0x1e8: length=4 kfede[2].name: _extent_sizes ; 0x31c: length=13 kfede[2].value: 1 4 16 ; 0x35c: length=6 kfede[3].name: _extent_counts ; 0x490: length=14 kfede[3].value: 20000 20000 214748367 ; 0x4d0: length=21 kfede[4].name: _ ; 0x604: length=1 kfede[4].value: 0 ; 0x644: length=1 kfede[5].name: au_size ; 0x778: length=7 kfede[5].value: ; 0x7b8: length=9 kfede[6].name: sector_size ; 0x8ec: length=11 kfede[6].value: ; 0x92c: length=9 kfede[7].name: compatible ; 0xa60: length=10 kfede[7].value: ; 0xaa0: length=9 kfede[8].name: cell ; 0xbd4: length=4 kfede[8].value: FALSE ; 0xc14: length=5 kfede[9].name: access_control ; 0xd48: length=14 kfede[9].value: FALSE ; 0xd88: length=5
以上,我們還窺探到了許多隱藏的磁盤組屬性。我們看到_REBALANCE_COMPACT屬性是TRUE。這個屬性關系到磁盤組rebalance中的compact環節。我們還可以看到extent的增長方式(_EXTENT_SIZES),初始化大小會從1個AU到4個AU再到16AU。_EXTENT_COUNTS表示extent增長的斷點,前20000個extent只包含1個AU,接下來20000個extent包含4個AU,再往后的extent都會包含16個AU。
每個磁盤組都具有一些磁盤組的屬性,磁盤組屬性用來細粒度地控制磁盤組的特性。大多數屬性存放在屬性目錄并且可以通過查詢v$asm_attribute視圖獲得。
[1] 在ASM 11.1之前的版本,我們也可以在創建磁盤組時指定AU的大小,這是通過ASM隱含參數_ASM_AUSIZE來實現的,在ASM 11.1及之后的版本,由于ASM磁盤組屬性的出現,就可以通過設置ASM磁盤組的AU_SIZE屬性值來達到同樣的目的。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。