Normal模式下ASM中的空间参数解析

在做数据库巡检的时候,检查ASM空间是必做的一步。在冗余模式为external时,可以很容易计算出剩余可用空间=Free_MB,如果下图所示,磁盘组DATA的剩余可用空间为22403MB。

如果磁盘组为normal,又是如何计算剩余可用空间,以及REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的值,这个问题的答案跟很多复杂问题的答案一样:要看情况。

Column

Description

FREE_MB

Unused capacity of the disk group (in megabytes).

REQUIRED_MIRROR_FREE_MB

Amount of space that is required to be available in a given disk group in order to restore redundancy after one or more disk failures. The amount of space displayed in this column takes mirroring effects into account.

USABLE_FILE_MB

Amount of free space that can be safely utilized taking mirroring into account and yet be able to restore redundancy after a disk failure.

       简单来说,视V$ASM_DISKGROUP中:

FREE_MB:磁盘组中没有被使用的空间。

REQUIRED_MIRROR_FREE_MB:如果ASM磁盘或ASM磁盘组出现故障后,要重新满足冗余度的定义,要求有多少的空闲空间。

USABLE_FILE_MB:在满足冗余度之后,还有多少的剩余空间可以用。

       那么,ASM是如何计算出这些值的?接下来可以通过一些不同组合的磁盘组来解答这一问题。

  1. Normal模式,个Failgroup

先创建一个normal冗余模式的磁盘组DATANEW,然后添加4块磁盘,每个Failgroup2块,其中1块1G,另一块500M。

 

Disk01

Disk02

Failgroup01

1G

500M

Failgroup02

1G

500M

 

ASM在磁盘组内使用failgroup来提供数据的镜像和冗余,数据存储在一个failgroup的同时,会在另外的failgroup存储相同的数据副本,以此来保障数据安全,在一个normal冗余的磁盘组中,会有两份相同的数据,所以在一个failgroup出现故障时并不会影响整个磁盘组的可用性,ASM还可以根据镜像数据让磁盘组重新达到normal冗余的要求,但是为了能做到这一点,需要磁盘有足够的剩余空间,因此failgroup实际有多大就显得非常的重要了。

查看视图V$ASM_DISKGROUP来获得磁盘组的相关信息:

以上输出显示:

TOTAL_MB=3048MB --正好是所有磁盘大小之和。

FREE_MB=2854MB --并不等于TOTAL_MB,说明盘头中有数据。

REQUIRED_MIRROR_FREE_MB=1024M --大小等于最大的磁盘。

USABLE_FILE_MB=915MB --计算公式:USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 磁盘冗余度

从磁盘组可以得到的信息是磁盘中没有被使用的空间为2854MB,如果出现故障,要满足冗余度的定义,要有1024MB的空间,在满足冗余度之后,还有915MB的剩余空间可以用。

那么磁盘组DATANEW到底还剩余多少空间呢?是要看FREE_MB,还是USABLE_FILE_MB?接下来就来验证这一问题:

  1. 磁盘组DATANEW新增一个1000MB的数据文件

再次查看视图V$ASM_DISKGROUP信息

以上输出显示:

FREE_MB=836MB --约等于(2854-1000)/2

USABLE_FILE_MB=-94MB

根据计算公式USABLE_FILE_MB=(836 – 1024) / 2=-94,尽管添加数据文件之前USABLE_FILE_MB为915MB,但还是成功添加了一个1000MB的文件,而FREE_MB的剩余空间减少约等于2个数据文件的大小。

  1. 再次添加一个500MB的数据文件

报错DATANEW剩余空间不足,836M的剩余空间无法再创建一个500M的文件。

              从上面的测试可以推论出:

  1. 在磁盘组为normal冗余模式下,实际剩余可用空间为FREE_MB / 冗余度,也就是FREE_MB的一半,这是因为根据normal冗余,数据会存在一份相同的镜像,所以实际占用的空间也会多出一倍。
  2. USABLE_FILE_MB可以变为负值,表示ASM并不会强制留出REQUIRED_MIRROR_FREE_MB的空间,但是这意味着如果遭遇了ASM磁盘组故障,有可能会没有足够的剩余空间来重新满足冗余度的要求。如果USABLE_FILE_MB为负数,就应该增加磁盘组的空间或者释放出一些空间来。
  1. Normal模式,多个Failgroup
  1. 在之前测试的基础上新加2个Failgroup

 

Disk01

Disk02

Failgroup01

1G

500M

Failgroup02

1G

500M

Failgroup03

1G

500M

Failgroup04

2G

500M

查看视图V$ASM_DISKGROUP来获得磁盘组的相关信息:

结果有些不同,在有2个Failgroup的时候,REQUIRED_MIRROR_FREE_MB的值等于最大磁盘的大小,而在Failgroup大于2的时候,REQUIRED_MIRROR_FREE_MB的值等于最大Failgroup的大小。

ASM会在不同的failgroup中存储镜像数据,1个normal冗余的磁盘组要求至少有2个failgroup,1个high冗余的磁盘组要求至少3个failgroup,如果具有2个failgroup的normal冗余磁盘组,其中1个failgroup发生了故障,那么这个磁盘组如何重新满足冗余度的要求?不能!因此这种情况下,ASM仅仅给出了一个磁盘的大小作为REQUIRED_MIRROR_FREE_MB的值。

  1. 在添加一个1000MB的数据文件,磁盘组DATANEW就有了共2000MB的数据文件

再次查看视图V$ASM_DISKGROUP信息

和预期的一样,FREE_MB减少了近1000MB * 2的大小。

 

       综上所述,在normal冗余模式下,实际剩余空间 = FREE_MB / 2。REQUIRED_MIRROR_FREE_MB的值表示重新满足冗余度所需要的空间,这个值的大小取决于冗余度和failgroup的数量,failgroup数量为2时,这个值等于最大磁盘的大小(如果failgroup只有1个磁盘,那么这个值为0),failgroup数量大于3时,这个值等于最大failgroup的大小。USABLE_FILE_MB的值表示在满足冗余度之后,还有多少的剩余空间可以用,这个值可以为负值,但是这意味着如果遭遇了ASM磁盘组故障,有可能会没有足够的剩余空间来重新满足冗余度的要求,为了避免出现负值情况,可以增加磁盘组空间。

发布了15 篇原创文章 · 获赞 0 · 访问量 4853
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览