The disk Used Space Directory (USD) – ASM file number 8 – maintains the number of allocation units (AU) used per zone, per disk in a disk group. The USD is split into a set of Used Space Entries (USE). Each USE will maintain a counter for the number of used AUs per disk, per zone. A disk zone can be either HOT or COLD.
This structure is version 11.2 specific and is relevant to the Intelligent Data Placement feature. The USD will be present in a newly created disk group in version 11.2 or when the ASM compatibility is advanced to 11.2.
Locating the used space directory
Let’s get the allocation units for the used space directory – for all disk groups.
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
Check the disk used space allocation for all disks in all disk groups.
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
The result shows that all space in all disks is allocated in the cold disk zones. Let’s have a closer look at the used space directory with kfed.
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
…
There are two disks in disk group number 1, so only the first two kfdusde entries are populated. And both show that all the space is allocated in the cold zone.
Check the used space directory entries for disk group 2.
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
…
Disk group 2 has four disks and again all space is allocated in the cold disk zones.
Hot files
Let’s create a disk group template for hot files.
Diskgroup altered.
Note that this feature requires the disk group attribute COMPATIBLE.RDBMS to be at least 11.2.
Now create a datafile that will be alocated in the disks’ hot zones.
Tablespace created.
Let’s check the space allocation now, by running the last query again.
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
The result shows that 51 MB (50 MB for the file and 1 MB for the file header) are now allocated in the hot zones across all disk in the disk group.
Warm up a file
I can also move an existing datafile into the hot zone. Let’s find all datafiles in disk group 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
Let’s move the undo tablespace datafile into the hot zone.
Diskgroup altered.
This action triggers the rebalance for disk group DATA, as file extents have to be moved to disks’ hot regions. Once the rebalance completes, the last query shows more data in hot region for disks in disk group number 2.
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
Conclusion
The disk Used Space Directory (USD) – ASM file number 8 – maintains the number of allocation units (AU) used per zone, per disk in a disk group. It is a supporting metadata structure for the Intelligent Data Placement feature in ASM version 11.2. One handy use of this feature is a control of datafile placement in disks’ hot or cold zones.
Comment