暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ASM磁盘组的动态扩展能力

原创 eygle 2019-09-19
1328

ASM的一个重要特性是动态的存储扩展功能。我们可以向现有的磁盘组中动态地加入新磁盘,当新磁盘被加入之后,Oracle还可以动态地将当前的数据均衡到新增加的磁盘,这个过程称为Rebalance,在后台通过asm_rbal_+ASM进程来完成。


我们知道,通过传统的卷管理软件进行空间扩展是极为复杂的。如果使用裸设备,那么空间一旦分配,大小是不能更改的;如果是文件系统,扩展某个卷将涉及文件系统的识别问题;而ASM为用户结束了这些麻烦。ASM使用裸设备来构建磁盘组,一方面拥有了裸设备的性能,另一方面又通过Oracle自身管理的Disk Group实现了动态的空间扩展和均衡,这大大简化了数据库系统的管理和技术复杂度。


ASM的动态扩展是通过将存储管理细粒度到AU(ASM Unit)单元来实现的,图6-15是ASM磁盘组动态扩展的一个示意图,通过动态扩展,可以看到新增加的磁盘通过自动的Rebalance过程已经分担了原有的存储。


企业微信截图_15688741349734.png

图6-15  ASM磁盘组的动态扩展过程


Rebalance过程是通过Oracle 10g新引入的一个后台进程完成的,这个进程名为RBAL:


[oracle@danaly ~]$ ps -ef|grep ora_rbal*oracle   
3815     1  0 Jan23 ?        00:00:01 ora_rbal_danalyoracle  
31601 23407  0 14:33 pts/2    00:00:00 grep ora_rbal*


ASM通过参数asm_power_limit来控制Rebalance的速度,该参数取值范围为1~11,参数值越大平衡速度越快,缺省值为1;可以在命令行通过指定Rebalance Power来控制平衡速度;该参数的控制作用是通过限制RBAL进程数量来实现的,当设置为最大11的时候,表示将启动11个rebalance进程同时进行数据平衡操作。


以下为设置rebalance power 11的时候,在操作系统中观察到的rebalance进程。


SQL> host ps -ef|grep ASM
<other process snipped>
oracle    8677     1  0 04:02 ?        00:00:00 asm_rbal_+ASM1
oracle   10459     1  0 04:05 ?        00:00:00 asm_arb0_+ASM1
oracle   10461     1  0 04:05 ?        00:00:00 asm_arb1_+ASM1
oracle   10463     1  0 04:05 ?        00:00:00 asm_arb2_+ASM1
oracle   10465     1  0 04:05 ?        00:00:00 asm_arb3_+ASM1
oracle   10467     1  0 04:05 ?        00:00:00 asm_arb4_+ASM1
oracle   10474     1  0 04:05 ?        00:00:00 asm_arb5_+ASM1
oracle   10476     1  0 04:05 ?        00:00:00 asm_arb6_+ASM1
oracle   10478     1  0 04:05 ?        00:00:00 asm_arb7_+ASM1
oracle   10480     1  0 04:05 ?        00:00:00 asm_arb8_+ASM1
oracle   10482     1  0 04:05 ?        00:00:00 asm_arb9_+ASM1
oracle   10484     1  0 04:05 ?        00:00:00 asm_arba_+ASM1
<other process snipped>


以下是一个向现有磁盘组加入一个新磁盘的过程:


SQL> alter diskgroup ORADG add disk 'ORCL:VOL6' rebalance power 11;
Diskgroup altered.
SQL> select group_number,disk_number,mode_status,name from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_STATUS    NAME
------------ ----------- -------------- --------------------
           0           4 ONLINE
           1           0 ONLINE         VOL1
           1           1 ONLINE         VOL2
           1           2 ONLINE         VOL3
           1           3 ONLINE         VOL4
           1           4 ONLINE         VOL6


可以看一下最初磁盘组中的磁盘使用情况为:


SQL> select name,total_mb,free_mb from v$asm_disk;
NAME                   TOTAL_MB    FREE_MB
-------------------- ---------- ----------
                           2870          0
VOL1                      19077       6571
VOL2                      19077       6497
VOL3                      19077       6558
VOL4                      12228       4321
VOL6                     104187      97622


经过Oracle的自动调整均衡之后,磁盘空间使用情况变为:


SQL> select name,total_mb,free_mb from v$asm_disk;
NAME                   TOTAL_MB    FREE_MB
-------------------- ---------- ----------
                           2870          0
VOL1                      19077      13337
VOL2                      19077      13381
VOL3                      19077      13337
VOL4                      12228       8548
VOL6                     104187      72966


可以看到数据已经逐渐均衡到VOL6上来。


磁盘组通过ASM实例透明地提供给数据库实例,那么数据库就不必再关心具体的数据文件在底层硬件上的存储。但是值得注意的是,Oracle的自动Rebalance需要消耗大量的IO,当数据库存储并不很大的情况下,Rebalance过程能够快速完成,但是当数据库的存储达到海量,如TB级时,Oracle的Rebalance时间可能就会变得极其漫长。所以当你需要使用Rebalance技术时,一定要认真评估其性能影响。


在数据Rebalance时,我们可以通过查询V$ASM_OPERATION视图来获知估算的完成时间。如下例,该Rebalance操作将在58分钟以后结束。注意,这仅仅是一个参考值。


SQL> select GROUP_NUMBER,STATE,SOFAR,OPERATION,EST_RATE,EST_MINUTES from V$ASM_OPERATION;
GROUP_NUMBER STATE         SOFAR OPERATION    EST_RATE EST_MINUTES
------------ -------- ---------- ---------- ---------- -----------
           1 RUN              47 REBAL            2241          5

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论