ASM 翻译系列第三十三弹:REQUIRED_MIRROR_FREE_MB的含义

REQUIRED_MIRROR_FREE_MB

REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB是V$ASM_DISKGROUP[_STAT]视图中非常有趣的两列。Oracle Support部门收到的很多问题是关于这两列的意义以及它们的值是怎么计算的。我本打算写些文章介绍一下,但是我意识到我不可能比Harald van Breederode做的更出色。因此我征得了他的同意来直接参考他的文章,所以还是请欣赏他的大作吧。

https://prutser.wordpress.com/2013/01/03/demystifying-asm-required_mirror_free_mb-and-usable_file_mb/

How much space can I use

既然已经解释了REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB,我想补充说明的是ASM不会阻止你使用所有可用空间(NORMAL冗余模式下总空间的1/2或者HIGH冗余模式下总空间的1/3)。但是一旦你使用完了所有磁盘组空间,将没有剩余空间用来扩展或者新增任何其他文件,在这种情况下,如果有磁盘出现故障,同样不会有剩余空间用来让数据重新满足需要的冗余度--直到故障的磁盘被替换并且rebalance完成。

Exadata with ASM version 11gR2

在安装了11.2 ASM版本的Exadata中,REQUIRED_MIRROR_FREE_MB等于磁盘组中最大的failgroup的大小(在真实的Exadata环境中,所有的failgroup默认都是相同的大小)。为了验证这个说法,让我们来看一个安装了11.2 ASM的Exadata的情况。

和大部分的Exadata安装一样,这里有3个磁盘组。

[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的每个failgroup有10个磁盘。为了验证REQUIRED_MIRROR_FREE_MB就是最大的failgroup的大小,这里我drop掉了部分磁盘。

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>

注意最大的failgroup的总大小为257280 MB。

最后,我们发现REQUIRED_MIRROR_FREE_MB就是最大的failgroup的大小:

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

SQL>

ASM中使用如下公式计算USABLE_FILE_MB:

USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 2

得到的结果为:272070 MB

Exadata with ASM version 12cR1

在安装12cR1版本ASM的Exadata中,REQUIRED_MIRROR_FREE_MB等于磁盘组中最大的磁盘的大小。

这里是一个来自安装了12.1.0.2.0 ASM的Exadata系统的例子。

[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>

同样的,我把DBFS_DG磁盘组中的failgroups设置成不同的大小。

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

SQL>

最大的failgroup的总大小为298240 MB,但是这一次REQUIRED_MIRROR_FREE_MB的大小为29824 MB:

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>

正如我们看到的,这是磁盘组中最大的磁盘的大小:

SQL> select max(TOTAL_MB) from v$asm_disk_stat where GROUP_NUMBER=2;

MAX(TOTAL_MB)

-------------

29824

SQL>

USABLE_FILE_MB的大小通过同样的公式计算获得:

USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 2

结果为:375970 MB

Conclusion

REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB是为了帮助DBA和存储管理员来规划磁盘组的容量和冗余度而设计的。在ASM中,它们的值只作为参考,并不具有强制性。

在12cR1 ASM版本的Exadata中,REQUIRED_MIRROR_FREE_MB等于磁盘组中最大的磁盘的大小,设计就是这样的,反映了该领域的经验:磁盘才是发生故障的组件,而不是整个存储节点。

本文来自合作伙伴“DBGEEK”

时间: 2025-01-19 08:00:39

ASM 翻译系列第三十三弹:REQUIRED_MIRROR_FREE_MB的含义的相关文章

Oracle ASM 翻译系列第三十弹:高级知识 Physical metadata replication

Physical metadata replication 从版本12.1开始,ASM会对某些物理元数据做一份复制,具体的说是每个磁盘的第一个AU(0号AU)上元数据.这意味着,ASM同时维护着两份磁盘头.FST(Free Space Table)表.AT(Allocation table)表的数据.需要注意的是ASM对这些数据采用的是复制(replicate),而不是镜像(mirror).ASM镜像(mirror)意味着把一份数据,拷贝到不同磁盘上:而物理元数据的副本位于相同的磁盘,因此使用的

ASM 翻译系列第三十一弹:了解ASM文件的空间分配

How many allocation units per file 本文主要是对ASM文件的空间分配进行一些探讨和研究. ASM空间分配的最小单位是AU,默认的AU size是1MB,但在Exadata下AU 的默认大小是4MB. ASM文件的空间分配是以extent为单位,每一个extent是由一个或多个AU组成,在11.2版本,前20000个extent,每一个extent由1个AU组成,接下来的20000个extent,每一个由4个AU组成,再超出的extent,每一个由16个AU组成.

ASM 翻译系列第三十二弹:自制数据抽取小工具

Find block in ASM 在本系列文章[ Where is my data]中,我已经演示了如何从ASM磁盘中定位和抽取一个Oracle的block,为了让这件事做起来不那么复杂,我又写了一个perl脚本find_block.pl来简化整个操作,只需要提供数据文件的名称和需要提取的block,这个脚本就可以输出从ASM磁盘组中抽取块的命令. find_block.pl find_block.pl是一个perl脚本,脚本里集成了dd或kfed命令来从ASM磁盘中抽取一个块,脚本可以在Li

ASM 翻译系列第三十四弹:ASM磁盘组重要属性介绍

ASM Disk Group Attributes 磁盘组的属性是ASM 11.1版本引入的,是磁盘组层面而非ASM实例层面的.磁盘组的属性有一些只能在创建磁盘组时指定,有一些只能在创建之后指定,还有一些可以在任何时候指定. 本篇内容是对本系列文章-[ASM Attributes Directory]的展开. ACCESS_CONTROL.ENABLED ACCESS_CONTROL.ENABLED属性指定了一个磁盘组的ASM File Access Control是否启用,参数的值可以设置为t

ASM 翻译系列第三弹:基础知识 About ASM disk groups, disks and files

Oracle ASM使用磁盘组来存放数据文件,每一个ASM的磁盘组由一些ASM磁盘组成,每一个ASM磁盘组本身是一个独立的存储单元,是自描述的,对于ASM磁盘组中数据库文件,ASM提供一个文件系统的接口,方便DBA做管理.存放在ASM磁盘组中的文件被均匀的分布在磁盘组中的所有磁盘上,通过这种方式,每一块磁盘都可以提供一致的性能,同时ASM的性能可以比得上裸设备的性能.[摘录自11GR2版本的ASM官方文档] ASM Disk Groups 一个ASM磁盘组是由一个或多个ASM磁盘组成的,每个AS

ASM 翻译系列第三十五弹:ASM 253号文件——ASM spfile

ASM spfile in a disk group 从ASM版本11.2开始,ASM spfile可以储存在ASM磁盘组里.事实上,在安装ASM时,OUI就已经把ASM spfile放在了磁盘组中.对于单实例环境和集群环境都是这样.在安装过程中创建的第一个磁盘组是spfile的默认位置,但这不是必要的.ASM spfile还是可以放在文件系统上,就是$ORACLE_HOME/dbs目录下. New ASMCMD commands 为支持该特性,ASMCMD引入了新的命令用来备份,复制和移动AS

Oracle ASM 翻译系列第十四弹:ASM Internal Rebalancing act

在ASM中,每一个文件的extent都均匀的分布在它所在磁盘组的所有磁盘上,无论是在文件第一次创建或是文件创建之后的重新resize都是如此,这也意味着我们始终能保持磁盘组中的每一个磁盘上都有一个平衡的空间分配. Rebalance operation 虽然文件在新建或是resize过程中都能保证空间的均匀分配,但是磁盘组在某些情况下会自动触发重平衡的操作,例如添加.删除和resize磁盘的操作(这些操作显然会让磁盘组变得不再平衡),再如,移动一个文件从磁盘的hot区到cold区.我们还可以通过

Oracle ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete

When will my rebalance complete "磁盘组的rebalance什么时候能完成?",这个问题我经常被问到,但是如果你期望我给出一个具体的数值,那么你会失望,毕竟ASM本身已经给你提供了一个估算值(GV$ASM_OPERATION.EST_MINUTES),其实你想知道的是rebalance完成的精确的时间.虽然我不能给你一个精确的时间,但是我可以给你一些rebalance的操作细节,让你知道当前rebalance是否正在进行中,进行到哪个阶段,以及这个阶段是

Oracle ASM 翻译系列第十六弹:ASM Internal ASM Active Change Directory

ASM Active Change Directory 当ASM实例要对多个元信息block进行原子修改时,ASM的active change directory 简称ACD会记录相应的日志,ACD是ASM元信息的3号文件.对应的日志记录会以单次IO的方式写入,来确保操作原子性. ACD被分成多个chunk或者thread,每个运行中的ASM实例都有它自己的42MB大小的chunk.当一个磁盘组被创建时,会分配一个独立的chunk给ACD.随着更多的实例挂载了该磁盘组,ACD的chunk数也会同