【转】ASM磁盘组的动态扩展能力

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

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

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

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

1 [oracle@danaly ~]$ ps -ef|grep ora_rbal*oracle  
2 3815     1  0 Jan23 ?        00:00:01 ora_rbal_danalyoracle  
3 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进程。

 1 SQL> host ps -ef|grep ASM  
 2 <other process snipped> 
 3 oracle    8677     1  0 04:02 ?        00:00:00 asm_rbal_+ASM1  
 4 oracle   10459     1  0 04:05 ?        00:00:00 asm_arb0_+ASM1  
 5 oracle   10461     1  0 04:05 ?        00:00:00 asm_arb1_+ASM1  
 6 oracle   10463     1  0 04:05 ?        00:00:00 asm_arb2_+ASM1  
 7 oracle   10465     1  0 04:05 ?        00:00:00 asm_arb3_+ASM1  
 8 oracle   10467     1  0 04:05 ?        00:00:00 asm_arb4_+ASM1  
 9 oracle   10474     1  0 04:05 ?        00:00:00 asm_arb5_+ASM1  
10 oracle   10476     1  0 04:05 ?        00:00:00 asm_arb6_+ASM1  
11 oracle   10478     1  0 04:05 ?        00:00:00 asm_arb7_+ASM1  
12 oracle   10480     1  0 04:05 ?        00:00:00 asm_arb8_+ASM1  
13 oracle   10482     1  0 04:05 ?        00:00:00 asm_arb9_+ASM1  
14 oracle   10484     1  0 04:05 ?        00:00:00 asm_arba_+ASM1  
15 <other process snipped> 

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

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

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

1 SQL> select name,total_mb,free_mb from v$asm_disk;  
2 NAME                   TOTAL_MB    FREE_MB  
3 -------------------- ---------- ----------  
4                            2870          0  
5 VOL1                      19077       6571  
6 VOL2                      19077       6497  
7 VOL3                      19077       6558  
8 VOL4                      12228       4321  
9 VOL6                     104187      97622 

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

1 SQL> select name,total_mb,free_mb from v$asm_disk;  
2 NAME                   TOTAL_MB    FREE_MB  
3 -------------------- ---------- ----------  
4                            2870          0  
5 VOL1                      19077      13337  
6 VOL2                      19077      13381  
7 VOL3                      19077      13337  
8 VOL4                      12228       8548  
9 VOL6                     104187      72966 

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

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

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

1 SQL> select GROUP_NUMBER,STATE,SOFAR,OPERATION,
2 EST_RATE,EST_MINUTES from V$ASM_OPERATION;  
3 GROUP_NUMBER STATE         SOFAR OPERATION    
4 EST_RATE EST_MINUTES  
5 ------------ -------- ---------- ---------- ---------- -----------  
6            1 RUN              47 REBAL            2241          58 
posted @ 2014-01-05 15:14  Dev 林  阅读(717)  评论(0编辑  收藏  举报