转载

ASM 翻译系列第二十二弹:ASM Internal ASM file number 8

原文: ASM file number 8

作者:Bane Radulovic

译者:郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高性能数据库云平台、QBackup数据库秒级备份恢复云平台等产品的整体交付管理与技术支持、维保服务工作。

审校:魏兴华

责编:仲培艺

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以上时会存在。

Locating the used space directory

我们通过下面的查询获取每个磁盘组中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
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
...

磁盘组二有四个磁盘,有四个条目被占用,并且每个磁盘已分配的所有空间确实都被分配在了冷区。

Hot files

我们来创建一个磁盘组模板,模板中指定基于此模板创建的文件都要位于磁盘的热区。

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.

再次运行上面的查询,检查空间使用。

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                               13       1152
           ASMDISK2                               12       1153
           ASMDISK1                               13       1152
           ASMDISK3                               13       1153

以上结果显示,51MB的空间(文件本身占用50MB,1MB用于文件头)被分配在热区,并且分布在磁盘组的所有磁盘中。

Warm up a file

我们还可以将一个已经存在的数据文件移到热区,我们来通过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);

Diskgroup altered.

这个命令会触发一次磁盘组DATA的rebalance,因为文件的extent都需要移动到磁盘的热区。当rebalance结束时,查询发现热区的数据增多了。

译者注:虽然是磁盘组的rebalance,但是速度上会比较快,只取决于undo文件的大小,因为其他文件本身已经是rebalance状态,只需要做一次快速的检查即可,并没有真正的大量的extent需要做移动。

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                               40       1125
           ASMDISK2                               39       1126
           ASMDISK1                               39       1126
           ASMDISK3                               39       1127

Conclusion

ASM元信息8号文件即磁盘空间使用目录,记录了每个ASM磁盘组上每块盘每一个zone的AU使用数。它为11.2版本中智能数据存放特性提供支持。这个特性的一个可行的用途在于我们可以控制数据在冷区、热区的存放。

译者注:对于做了RAID或是通过存储输出来的虚拟盘,磁盘的热区和冷区将会失去作用,同样,对于SSD盘,也是这样。

ASM翻译系列导读:

  • ASM 翻译系列第二十二弹:ASM Internal ASM file number 8
  • ASM 翻译系列第二十一弹:ASM Attributes Directory
  • ASM 翻译系列第二十弹:ASM Internal ASM file number 7
  • ASM 翻译系列第十九弹:ASM Internal ASM Continuing Operations Directory
  • ASM 翻译系列第十八弹:ASM Internal ASM file number 5
  • ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
  • ASM 翻译系列第十六弹:ASM Internal ASM Active Change Directory
  • ASM 翻译系列第十五弹:ASM Internal ASM File Directory
  • ASM 翻译系列第十四弹:ASM Internal Rebalancing act
  • ASM 翻译系列第十三弹:ASM 高级知识 - Forcing the issue
  • ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility
  • ASM 翻译系列第十一弹:高级知识 Offline or drop?
  • ASM 翻译系列第十弹:ASM Internal ASM DISK header
  • ASM 翻译系列第九弹:ASM工具箱
  • ASM 翻译系列第八弹:ASM Internal ASM file extent map
  • ASM 翻译系列第七弹:高级知识 How many partners?
  • ASM 翻译系列第六弹:高级知识如何映射asmlib管理的盘到它对应的设备名
  • ASM 翻译系列第五弹:高级知识ASM元数据概述
  • ASM 翻译系列第四弹:高级知识kfed元数据编辑器
  • ASM 翻译系列第三弹:ASM disk的基础知识
  • ASM 翻译系列第二弹:ASM 12C 版本新特性
  • ASM 翻译系列第一弹:基础知识 ASM AU,Extents,Mirroring 和 Failgroups
原文  http://geek.csdn.net/news/detail/95915
正文到此结束
Loading...