ASM中required_mirror_free_mb和usable_file_mb具体定义

来源:互联网 发布:淘宝万象客服 编辑:程序博客网 时间:2024/05/21 14:50

客户经常针对REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB混淆,每次跟客户讲解都很费力

下面用实际例子来验证该问题

首先根据官网文档v$asm_diskgroup视图定义



简单来说,视图V$ASM_DISKGROUP中的FREE_MB就是未使用的剩余空间(MB),REQUIRED_MIRROR_FREE_MB值代表了如果ASM磁盘或ASM磁盘组出现了故障,要重新满足冗余度的定义,要求有多少的空闲空间。USABLE_FILE_MB的值代表了在满足冗余度之后,还有多少的剩余空间可以用。


好吧如果抽象的说大家还不能理解,我们来动手做个试验

由于定义与冗余策略有关,我们逐一测试

a)冗余模式为external时


可见


3块500G的盘,创建external冗余策略的DG组,总容量1500G,由于未写入数据,FREE为1499G,其中少的空间为ASM元数据占用,故REQ_GB为0,而USEABLE_MB为去除REQ_MB后剩余的空间,此情况下与FREE_MB一样。


b)冗余模式为normal时,3块盘,每块盘为一个失败组


此时查看状态


可见,由于冗余策略是normal,有两份冗余,此时创建了3个失败组,如果一个失败组发生故障,则需要重构弥补丢失失败组的空间,就是500G(3个失败组FG1-3,均为500G),仍旧未写入数据,故FREE_MB仍旧是去除ASM元数据的1499GB,而USEABLE_MB则为满足两份冗余后,还剩余的空间公式为use_mb=(free_mb-req_mb)/2


c)冗余模式为normal,但是4块盘,每2块盘一个失败组


此时查看状态


好啦,现在我们有2个失败组,并且每个组2块500G的盘,则FG1和FG2都是1000G

那么此时REQ_MB竟然不是整个FG组大小1000G,说明REQ_MB是根据冗余模式而变化,如果只有2个FG组,ASM会将一个ASM_DISK作为REQ_MB大小500G,而不是整个FG组1000G,

同理USE_MB=(FREE_MB-REQ_MB)/2=749G

d)还不够过瘾,最后再举例一种情况,6块盘,3个失败组,每个失败组1000G


此时查看结果


这下明白了把,normal模式下,尤其compatible到了12以后,要求DG组内的asm_disk大小一致,这样计算req_mb的时候就是一个失败组故障情况下,里面一块asm_disk的大小,500G,

计算USE_mb公式一样 ( free_mb-req_mb)/2


e)normal模式清楚后,我们再看看high模式,6块盘,每块盘一个失败组


查询结果


因为是high模式,所以req_mb等于2个failgroup的大小(如果磁盘组中failgroup的大小不一样,会取两个最大的failgroup大小),这是因为一个high冗余的磁盘组需要能够容忍丢失2个failgroup而不影响数据的可用性.

同样use_mb=(free_mb-req_mb)/3=666G

因为需要3倍冗余,所以分母较normal模式,变为了3


f)最后来个终极实验,normal模式一个磁盘组8块盘,每个盘2T,FG01有两个盘为4T,FG02、03有3个盘为6T


可见req_mb是根据3个失败组中最大的失败组大小来算,(其中FG02和FG03大小为6144)同理use_mb=(free-req)/2



所以经过这些小实验,兄弟们应该彻底搞清这几个参数的意思了吧

总结成一句话:

REQUIRED_MIRROR_FREE_MB的值代表了ASM用来重新满足磁盘组定义的冗余度所需要的空间,这个值的大小依赖于磁盘组的冗余度和FailGroup失败组的数量。

如果有n>2个failgroup的normalDG,REQUIRED_MIRROR_FREE_MB的值等于一个failgroup的大小(如果失败组大小不一致,则以最大的失败组为req_mb大小)

如果只有2个failgroup的normalDG,那么REQUIRED_MIRROR_FREE_MB的值将等于一个磁盘的大小而非一个failgroup的大小。


如果有n>3个failgroup的high冗余磁盘组,REQUIRED_MIRROR_FREE_MB的值等于2个failgroup的大小

如果high冗余的磁盘组只有3个failgroup,那么REQUIRED_MIRROR_FREE_MB的值将会是两个磁盘的大小。


(这里有朋友会问了,那么什么时候req_mb是按失败组算,什么时候按失败组中的asm盘算呢,从规律中可以看出来,

normal模式下,当FG组大于2的时候,那么这个时候,有故障,必须确保有整个失败组来支撑,所以这个时候按失败组算;

而当FG组等于2的时候,这个时候由于normal模式是2份数据,所以,只要来按1块asm_disk来算即可

同理,high模式下,当FG组大于3的时候,那么这个时候,有故障,必须确保有最少2个失败组来弥补,确保3份数据;

当FG等于3的时候,就是2块asm_disk即可)



USABLE_FILE_MB的值代表了总的可用来存储数据的空间,它的值依赖磁盘组的大小,磁盘组的冗余度和REQUIRED_MIRROR_FREE_MB的值,USABLE_FILE_MB的值的计算方法如下: 

use_mb=(free_mb-req_mb)/2|3   其中normal模式分母为2,high模式分母为3