ASM磁盘组空闲空间假象

本文通过示例展示了在ASM磁盘组中,由于磁盘容量差异导致的空闲空间假象问题。当尝试创建表空间时,尽管ASM实例显示有可用空间,但由于磁盘间空间分配不均,仍会出现空间不足的错误。这揭示了ASM磁盘组在容量管理上的潜在挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


作者 阿九【转载时请务必以超链接形式标明文章原始出处和作者信息】


先看下ASM磁盘组的组成和容量


SQL> select group_number,disk_number,total_mb,free_mb from v$asm_disk order by disk_number;


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           0           0          0          0
           1           0       3072       1795
           1           1       1024        594
           0           1          0          0


SQL>


磁盘组是由两个盘组成,一个3G大小,一个1G大小
看下总体的容量
SQL> !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  EXTERN  N         512   4096  1048576      4096     2368                0            2368              0             N  DATA/


SQL> 


可以看到总空闲空间为 2368M




我们测试添加一个1024M的文件看看
SQL> create tablespace testasm3 datafile '+DATA' size 1024M;


表空间已创建。


SQL> 




表空间创建成功,我们看下容量变化


SQL> select group_number,disk_number,total_mb,free_mb from v$asm_disk order by disk_number;


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           0           0          0          0
           1           0       3072       1009
           1           1       1024        333
           0           1          0          0


SQL> 


看来1024M大小被分散到了两个磁盘上,总空闲容量为:1342M,我们再添加一个1024M的表空间看看


SQL> create tablespace testasm4 datafile '+DATA' size 1024M;


表空间已创建。


SQL> 




表空间也创建成功了,我们再看下容量变化
SQL> /


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           0           0          0          0
           1           0       3072        239
           1           1       1024         77
           0           1          0          0


SQL> 


看到总空想容量还有:316M,但最小的一个盘只剩77M容量,我们按300M来添加一个表空间看看
SQL> create tablespace testasm5 datafile '+DATA' size 300M;


表空间已创建。


SQL> 


表空间创建成功了,看下容量变化
SQL> /


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           0           0          0          0
           1           0       3072         12
           1           1       1024          2
           0           1          0          0


SQL> 


SQL> !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  EXTERN  N         512   4096  1048576      4096       14                0              14              0             N  DATA/


SQL> 


可以ASM磁盘组总空闲容量为14M,我们继续添加一个13M的表空间看看


SQL> create tablespace testasm6 datafile '+DATA' size 13M;
create tablespace testasm6 datafile '+DATA' size 13M
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 '+DATA' 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +DATA
ORA-15041: diskgroup "DATA" space exhausted




SQL> 


报错了,提示空间不足,但是从ASM实例来看,空闲空间还有14M呢,我加个13M的空间应该不会报错啊




SQL> create tablespace testasm6 datafile '+DATA' size 12M;
create tablespace testasm6 datafile '+DATA' size 12M
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 '+DATA' 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +DATA
ORA-15041: diskgroup "DATA" space exhausted




SQL> create tablespace testasm6 datafile '+DATA' size 10M;
create tablespace testasm6 datafile '+DATA' size 10M
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 '+DATA' 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +DATA
ORA-15041: diskgroup "DATA" space exhausted




SQL> 


无论我用10M 还是12M都还是报空间不足错误。


看来ASM磁盘组,如果磁盘组中各磁盘容量差异太大,最终会导致这种空闲空间的虚假信息。
因为ASM的rebalance不能将某个比例的数据分配到小容量的磁盘中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值