【转】ASM Attributes Directory

9

The ASM attributes directory – the ASM metadata file number 9 – contains the information about disk group attributes. The attributes directory exists only in disk groups with the COMPATIBLE.ASM (attribute!) set to 11.1 or higher.

 

Disk group attributes were introduced in ASM version 11.1[1] and can be used to fine tune the disk group properties. It is worth noting that some attributes can be set only at the time of the disk group creation (e.g. AU_SIZE), while others can be set at any time (e.g. DISK_REPAIR_TIME). Some attribute values might be stored in the disk header (e.g. AU_SIZE), while some others (e.g. COMPATIBLE.ASM), can be stored either in thepartnership and status table or in the disk header (depending on the ASM version).

 

Public attributes

 

Most attributes are stored in the attributes directory and are externalized via V$ASM_ATTRIBUTE view. Let’s have a look at disk group attributes for all my disk groups.

 

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>

 

One attribute value we can modify at any time is the disk repair timer. Let’s use asmcmd to do that for disk group 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

$

 

Hidden attributes

 

As mentioned in the introduction, the attributes directory is the ASM metadata file number 9. Let’s locate the attributes directory, in disk group number 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>

 

Now check out the attributes with the kfed tool.

 

$ 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

 

Fields kfede[i] will have the disk group attribute names and values. Let’s look at all of them:

 

$ 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

 

This gives us a glimpse into the hidden (underscore) disk group attributes. We can see that the value of the _REBALANCE_COMPACT is TRUE. That is the attribute to do with the compacting phase of the disk group rebalance. We also see how the extent size will grow (_EXTENT_SIZES) – initial size will be 1 AU, then 4 AU and finally 16 AU. And the _EXTENT_COUNTS shows the breaking points for the extent size growth – first 20000 extents will be 1 AU in size, next 20000 will be 4 AU and the rest will be 16 AU.

 

Conclusion

 

Disk group attributes can be used to fine tune the disk group properties. Most attributes are stored in the attributes directory and are externalized via V$ASM_ATTRIBUTE view. For details about the attributes please see the ASM Disk Group Attributes post.

 

[1] In ASM version prior to 11.1 it was possible to create a disk group with user specified allocation unit size. That was done via hidden ASM initialization parameter _ASM_AUSIZE. While technically that was not a disk group attribute, it served the same purpose as the AU_SIZE attribute in ASM version 11.1 and later.

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号