天天看點

Oracle ASM 翻譯系列第二十一彈:ASM Attributes DirectoryASM Attributes Directory

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

     disk_repair_time        3.6h

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

現在用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[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屬性值來達到同樣的目的。

<b>本文來自雲栖社群合作夥伴“dbgeek”</b>