REQUIRED_MIRROR_FREE_MB与USABLE_FILE_MB是V$ASM_DISKGROUP[_STAT]视图中两个非常有意义的列。关于这两个字段有很多问题与及如何计算它们。
How much space can I use
ASM不能阻止你使用外部冗余磁盘组的所有可用空间,normal冗余磁盘组总空间的一半,high冗余磁盘组总空间的三分之一。但如果你想填满磁盘组直到溢出,使它没有足够空间来增长或增加任何文件,在磁盘故障情况下,直到故障磁盘被替换与rebalance操作完成之前,将没有空间来还原一些数据的冗余.
11gr2 ASM in Exadata
在Exadata ASM 11gr2中,required_mirror_free_mb作为磁盘组中的最大故障组的大小被显示。下面是Exadata中的11.2.0.4 ASM的例子进行说明。
[grid@exadb01 ~]$ sqlplus / as sysasm SQL*Plus: Release 11.2.0.4.0 Production on [date] SQL> select NAME, GROUP_NUMBER from v$asm_diskgroup_stat; NAME GROUP_NUMBER --------- ------------ DATA 1 DBFS_DG 2 RECO 3 SQL>
下面将查看磁盘组DBFS_DG。正常来说对于磁盘组DBFS_DG的每个故障组有10块磁盘。为了说明REQUIRED_MIRROR_FREE_MB对于最大故障组所显示的大小删除了几块磁盘。
SQL> select FAILGROUP, count(NAME) "Disks", sum(TOTAL_MB) "MB" from v$asm_disk_stat where GROUP_NUMBER=2 group by FAILGROUP order by 3; FAILGROUP Disks MB ---------- ---------- ---------- EXACELL04 7 180096 EXACELL01 8 205824 EXACELL02 9 231552 EXACELL03 10 257280 SQL>
可以看到最大故障组中的总空间大小为257280MB。
最后我们来查看最大故障组的required_mirror_free_mb大小
SQL> select NAME, TOTAL_MB, FREE_MB, REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB from v$asm_diskgroup_stat where GROUP_NUMBER=2; NAME TOTAL_MB FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB ---------- ---------- ---------- ----------------------- -------------- DBFS_DG 874752 801420 257280 272070
ASM计算USABLE_FILE_MB使用以下公式:
USABLE_FILE_MB=(FREE_MB-REQUIRED_MIRROR_FREE_MB)/2 =(801420-257280)/2=544140/2=272070
Exadata with ASM version 12cR1
在使用ASM 12cr1的exadata中,required_mirror_free_mb作为磁盘组中最大的大小被显示
[grid@exadb03 ~]$ sqlplus / as sysasm SQL*Plus: Release 12.1.0.2.0 Production on [date] SQL> select NAME, GROUP_NUMBER from v$asm_diskgroup_stat; NAME GROUP_NUMBER -------- ------------ DATA 1 DBFS_DG 2 RECO 3 SQL> select FAILGROUP, count(NAME) "Disks", sum(TOTAL_MB) "MB" from v$asm_disk_stat where GROUP_NUMBER=2 group by FAILGROUP order by 3; FAILGROUP Disks MB ---------- ---------- ---------- EXACELL05 8 238592 EXACELL07 9 268416 EXACELL06 10 298240
最大故障组中的总空间为298240MB,但这时required_mirror_free_mb显示的大小为29824MB。
SQL> select NAME, TOTAL_MB, FREE_MB, REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB from v$asm_diskgroup_stat where GROUP_NUMBER=2; 2 3 NAME TOTAL_MB FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB ---------- ---------- ---------- ----------------------- -------------- DBFS_DG 805248 781764 29824 375970
下面查看磁盘组中最大磁盘的大小
SQL> select max(TOTAL_MB) from v$asm_disk_stat where GROUP_NUMBER=2; MAX(TOTAL_MB) ------------- 29824
ASM计算usable_file_mb的公式如下:
USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 2 =(781764-29824)/2=375970
小结:
required_mirror_free_mb与usable_file_mb用来帮助dba与存储管理员来规划磁盘组容量与冗余。这只是一个报告,ASM并不执行。在ASM为12cr1的exadata中,required_mirror_free_mb的大小就是磁盘组中最大磁盘的大小。通过这种设计,从这个字段就能反映出实践经验,它显示了磁盘出现故障,而不是整个存储单元。