asm的Usable_file_MB 出现负值说明

本文解析了Oracle ASM磁盘组中Usable_file_MB出现负数的原因及计算方法。当Free_MB小于最大FailGroup大小时,Usable_file_MB会出现负数,这表明磁盘组在经历一次故障后可能无法满足冗余需求。

grid@rac1:/home/grid>asmcmd lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  NORMAL  N         512   4096  1048576      9216     8281             3072            2604              0             Y  OCRVOTE/
MOUNTED  NORMAL  N         512   4096  1048576    456704   347918                0          173959              2             N  REDODG/
MOUNTED  NORMAL  N         512   4096  1048576  12102656  3596985          4110336         -256675              0             N  DATADG/


看到 Usable_file_MB 该值为负数 是不是比较奇怪。
通过查询联机文档 具体解释如下:


Req_mir_free_MB NUMBER 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.
Req_mir_free_MB:考虑镜像需要的空闲空间,一般约等于一个FailGroup的大小。
如果一个磁盘组里FailGroup大小不一样,ORACLE会取最大的FailGroup作为Req_mir_free_MB的值。Free_MB代表了真正剩余空间,包含了镜像块在里面。
因此真正可用的FREE空间等于 Free_MB/冗余度(当前希望你的每个FG大小基本相等,否则可用空间就不是这么算了)

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
Usable_file_MB的计算方法为:
Usable_file_MB=(Free_MB-Req_mir_free_MB)/冗余度
从上面的公式可以看出如果Free_MB的大小小于磁盘组最大的一个FailGroup大小的话,值就会出现负数。出现负数后,非常可能一个
FailGroup毁坏后剩余的DG空间不再满足对于mirror/rebalance的要求。如果想看磁盘组剩余空间的话,主要关注FREE_MB的值就可以了。


列举说明 :
当创建一个创建组 ,该组使用normal 的冗余方式,该组包括3个failgroup且3个failgroup一样大。
那么当该磁盘组可用容量占比总容量小于33.3%,那么这个时候该值会出现负值 。
大概公式如下 :
Usable_file_MB=(Free_MB-Req_mir_free_MB)/冗余度

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31134212/viewspace-2086568/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31134212/viewspace-2086568/

<think>好的,我需要帮助用户将FREE_MBUSABLE_FILE_MB转换为TB单位。首先,用户提供了当前的数值,比如FREE_MB是88132706,USABLE_FILE_MB是19647529。我需要确定如何正确进行单位转换。 首先,单位转换的基本方法是将兆字节(MB)转换为太字节(TB)。已知1TB等于1024GB,而1GB等于1024MB,所以1TB等于1024*1024=1048576MB。因此,将MB转换为TB需要将数值除以1048576。 接下来,用户可能需要四舍五入到合适的小数位,比如保留两位小数。对于FREE_MB,计算88132706 ÷ 1048576 ≈ 84.06 TB。同样,USABLE_FILE_MB是19647529 ÷ 1048576 ≈ 18.74 TB。这里需要注意的是,可能需要根据实际情况调整小数位数,或者使用截断而不是四舍五入,但通常四舍五入更常见。 另外,用户提到的引用[1]中的SQL查询结果,可能需要确认这些字段的单位确实是MB,确保转换的准确性。例如,v$asm_diskgroup视图中的FREE_MBUSABLE_FILE_MB都是以MB为单位的,所以转换公式适用。 用户可能还想知道这两个值的区别。根据引用[3],USABLE_FILE_MB考虑了镜像冗余后的可用空间,而FREE_MB是未考虑冗余的剩余空间。因此,在计算可用空间时,应该使用USABLE_FILE_MB,尤其是在ASM环境中,因为它反映了实际可用的存储量。 最后,用户可能需要将这些转换应用到整个查询结果中,而不仅仅是示例中的一行数据。因此,提供一个通用的转换方法,比如在SQL查询中直接进行计算,可能会更有帮助。例如,在查询语句中添加计算列,将FREE_MBUSABLE_FILE_MB转换为TB。 总结步骤: 1. 确认单位转换公式:1 TB = 1048576 MB。 2. 将每个数值除以1048576得到TB单位。 3. 四舍五入到合适的小数位。 4. 区分FREE_MBUSABLE_FILE_MB的实际意义,确保使用正确的值。</think>要将`FREE_MB`和`USABLE_FILE_MB`转换为以TB为单位的值,可按以下步骤操作: 1. **单位转换公式** 1 TB = 1024 GB = 1024 × 1024 MB = 1,048,576 MB。因此,转换公式为: $$ \text{TB值} = \frac{\text{MB值}}{1,048,576} $$ 2. **计算示例** - **FREE_MB**: $$ \frac{88,132,706}{1,048,576} \approx 84.06 \, \text{TB} $$ - **USABLE_FILE_MB**: $$ \frac{19,647,529}{1,048,576} \approx 18.74 \, \text{TB} $$ 3. **SQL查询直接转换** 可以在查询语句中直接添加计算列(以Oracle SQL为例): ```sql SELECT name, state, type, free_mb, total_mb, usable_file_mb, ROUND(free_mb / 1048576, 2) AS free_tb, ROUND(usable_file_mb / 1048576, 2) AS usable_tb FROM v$asm_diskgroup; ``` 结果示例: | NAME | STATE | TYPE | FREE_MB | USABLE_FILE_MB | FREE_TB | USABLE_TB | |------|-------|------|---------|----------------|---------|-----------| | ... | ... | ... | 88132706| 19647529 | 84.06 | 18.74 | 4. **关键字段说明** - `FREE_MB`:未考虑冗余的剩余空间[^3]。 - `USABLE_FILE_MB`:实际可用空间(已考虑ASM镜像冗余)[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值