当前位置: 首页 > 数据库 > oracle >

Oracle ASM Rebalance特性浅解

 

ASM动态重新平衡特性

     在ASM环境中,有一个重要的特性叫做动态重新平衡(Rebalancing),即当ASM需要增加磁盘空间时,可将新的磁盘设备添加到磁盘组,ASM磁盘组会按照一定比例将数据从一个或多个已有的磁盘移动到新的磁盘,从而维持所有磁盘之间整体的I/O平衡。
     这种特性也提供了将整个数据库从一组较慢的磁盘迁移到一组较快磁盘的迁移方法,而且整个过程数据库能保持联机状态。当重新平衡操作完成后,我们可以剔除较慢的磁盘组,保留较快磁盘的磁盘组,从而完成联机状态下的数据迁移。

动态重新平衡触发条件

     Rebalancing触发条件:当ASM需要改变磁盘的配置时,比如往ASM当前磁盘组中添加新的磁盘成员(alter diskgroup data add disk '/dev/raw/raw7';),删除故障组的磁盘(alter diskgroup data drop disk 'name';),添加新的磁盘组或者删除旧的磁盘组等等,只要当数据库联机并且用户正在使用该数据库时,都将触发ASM进行动态的重新平衡。
当然也可以通过更改ASM初始参数ASM_POWER_LIMIT的值或使用ALTER DISKGROUP REBALANCE POWER ,可控制磁盘重平衡的速度及对运行数据库I/O的影响。11.2.0.2版本以上,ASM_POWER_LIMIT和POWER的取值范围是0-1024,数值越大并发越高,重平衡速度也越快,后台I/O消耗越大。
01

使用ASM_POWER_LiMIT 调整rebalance 并发,asm_power_limit 默认值为1,若设置0,则为禁止rebalancing。
 
 
使用ALTER DISKGROUP REBALANCE POWER改变磁盘动态平衡时间,power值越大,迁移速度越快,I/O消耗也越大。
02
 

 

重平衡时间预估及后台追踪

     经常有客户会问:“咱使用ASM磁盘迁移数据多长时间完成?”其实在ASM环境中,ASM会根据当前数据库磁盘组大小、个数、性能、数据库整体I/O负载及asm_power_limit等综合因素,给出的一个完成的预估时间,我们可以通过GV$ASM_OPERATION.EST_MINUTES这个字段查到。但是如果我们想要更精确的知道现在rebalance到什么阶段,我们就需要了解一下关于重平衡的三个阶段。
     第一阶段:rebalance plan,ASM会计算出重平衡的计划。计划取决于很多因素,例如磁盘组大小、磁盘组中的文件个数、磁盘的partnership是否需要调整等等。这个过程时间不会太长,一般不会超过几分钟。
     第二阶段:extent relocating,区迁移是真正干活的阶段,这个阶段,ASM的区会在磁盘组中的磁盘间移动,这个过程会花费大部分的时间。这个过程中,ASM会记录区的移动数量,以及实际的I/O性能,从而估算该过程需要花费的时间(GV$ASM_OPERATION.EST_MINUTES记录估算出的时间)。不过要注意的是,这只是估算的时间,真正的花费时间还取决于整体负载(特别是磁盘相关的负载)。
03
 
 
 
上图中,EST_MINUTES的预估值第一次显示2分钟,再次刷新显示1分钟。有些时候EST_MINUTES的值可能并不能给你太多的证据,我们还可以看到SOFAR(截止目前移动的UA数)的值一直在增加,这也是一个很好的一个观察动态平衡指标。
 
     第三阶段是磁盘的compacting阶段(ASM 11.1.0.7版本及以上支持),这个过程是将磁盘上存的数据尽可能的移动到磁盘的外圈磁道上去(机械盘的外圈速度更快),以提供更高的性能。实际上,你了解了第二个阶段extent relocation什么时候完成,一旦它完成了,整个磁盘组的冗余就已经完成了。
04
 
 
 
 
 
 

上图中,est_minutes显示为0,并不能代表rebalance完全结束,我们还可以通过ARB0进程的trc追踪文件,当前正在对哪一个ASM文件的extent的在进行重分配tail -200f /u01/app/grid/diag/asm/+asm/+ASM1/trace/+ASM1_arb0_8568.trc 来观察或者还可以通过ASM的alert日志中也可以显示磁盘的操作,下图为 +ASM1_arb0_8568.trc

 
 
 
 05
 
 
 
 
 
 

ASM动态重平衡总结

     ASM rebalance重平衡是以文件为基本操作单位的,在arb进程的trc文件可以观察到,如果ASM存储的配置改变,一个正在进行的REBALANCE可能会被重启。或是人为导致了重平衡的失败,那么需要手工的触发重平衡,从上次断开的位置继续进行。在同一个集群中,每个实例只能有一个磁盘组在做重平衡操作。如果同时指定多个磁盘组做重平衡,那么ASM会尽量把重平衡动作在集群中可用节点上并行执行,如果没有其他可用节点了,那么就会串行执行。重平衡过程中,如果遇到ASM实例重启,那么实例起来后重平衡操作会继续进行。在执行ALTER DISKGROUP 命令对磁盘进行添加、删除、调整大小时,可以指定REBALANCE子句,以及相关的POWER值、WAIT/NOWAIT选项。
     ORACLE ASM REBALANCE的这个特性,为我们进行比如oracle RAC存储升级,在不停数据库的情况,将数据库数据文件从旧设备迁移到新设备,提供了一个可靠的方式。

ASM相关视图

视图 描述
v$asm_disk(_stat) 查看磁盘及其状态信息
v$asm_diskgroup(_stat) 查看磁盘组及其状态信息
v$asm_operation 查看当前磁盘的操作信息
v$asm_client 返回当前连接的客户端实例信息
v$asm_file 返回asm文件的相关信息
 
 
------分隔线----------------------------
  • 收藏
  • 挑错
  • 推荐
  • 打印