ASM 翻译系列第十四弹:ASM Internal Rebalancing act

更新时间:2016-08-17 13:57:43 点击次数:2128次

Rebalancing act

在ASM中,每一个文件的extent都均匀的分布在它所在磁盘组的所有磁盘上,无论是在文件次创建或是文件创建之后的重新resize都是如此,这也意味着我们始终能保持磁盘组中的每一个磁盘上都有一个平衡的空间分配。

Rebalance operation

虽然文件在新建或是resize过程中都能保证空间的均匀分配,但是磁盘组在某些情况下会自动触发重平衡的操作,例如添加、删除和resize磁盘的操作(这些操作显然会让磁盘组变得不再平衡),再如,移动一个文件从磁盘的hot区到cold区。我们还可以通过命令 ALTER DISKGROUP … REBALANCE手工触发rebalance。同时还可以通过给这个命令增加power子句来修改rebalance的并行度,在磁盘组因为任何理由变得不再平衡的时候,都可以运行这个命令来让磁盘组再次变得平衡。

译者注:由于ASM要求每个文件在ASM磁盘组的所有磁盘上都均匀分配,因此添加、删除磁盘一定会触发REBALANCE,这个特性可能在传统的卷管理软件上并不常见。还会有一些特例导致文件在ASM磁盘组的磁盘上空间分布不均匀,例如external模式下,磁盘组中的磁盘大小差异很大。

在ALTER DISKGROUP…REBALANCE命令中,可以指定POWER子句,用来指定重平衡的并行度。这个参数可以指定为0,这时重平衡操作会被挂起,直到下一次手工或者自动触发重平衡操作。可以将POWER设置为一个较高的值,这样一定程度上可以加快重平衡的速度,缩短重平衡花费的时间。

在执行ALTER DISKGROUP … REBALANCE命令时,默认会马上返回执行成功,这样我们可以在窗口继续执行其他命令,但是重平衡的操作其实在后台继续执行。我们可以通过视图V$ASM_OPERATION查看重平衡的进度。

Three phase power

重平衡操作共分为三个阶段:

注意:磁盘组在rebalance过程中并不会去修复存在逻辑错误或物理错误的数据,在12C中通过新增的一个ASM-scrubbing功能可以做到这一点,请参考本系列的【ASM data scrubbing】篇。

重平衡过程需要注意的点:

Tuning rebalance operations

在以下两种个情况下,重平衡的并行度是ASM_POWER_LIMIT参数指定的值:

我们可以动态的调整该参数,从而调整重平衡的并行度。高的并行度会缩短重平衡的花费时间,但是时间并不是随着并行度递增而线性减少,这取决于存储的整体负载、可用的吞吐量和底层磁盘的响应速度。 
在重平衡过程中,我们可以动态调整并行度。通过ALTER DISKGROUP … REBALANCE POWER N命令来指定一个新的并行度。修改并行度,会停止当前的重平衡,然后根据新的POWER参数重新开始重平衡过程。

虽然修改并行度会导致停止当前的重平衡,开启新的重平衡,但是根据我的观察,重平衡可以增量进行,例如旧的重平衡已经完成了对100号文件的重平衡操作,那么下次重新启动重平衡会从101号文件开始,100号文件会被跳过,或者是在做一些检查后很快的跳过。

Relevant initialization parameters and disk group attributes

ASM_POWER_LIMIT

这个参数是磁盘组进行重平衡操作时默认的并行度。在11.2.0.2之前它的取值范围是0-11,从11.2.0.2版本开始,它的取值范围是0-1024。当然这取决于磁盘组的属性COMPATIBLE.ASM的设定值(见下文)。ASM_POWER_LIMIT默认值是1,当你将这个值指定为0时,会禁止重平衡操作。

_DISABLE_REBALANCE_COMPACT

设置初始化参数_DISABLE_REBALANCE_COMPACT=TRUE会禁止磁盘组重平衡的第三个阶段(压缩阶段)。该参数对所有的磁盘组生效。

_REBALANCE_COMPACT

这是个隐含参数,设置_REBALANCE_COMPACT=FALSE会禁止磁盘组重平衡的第三个阶段(压缩阶段)。该参数指定单个磁盘组,对单磁盘组生效。

_ASM_IMBALANCE_TOLERANCE

这个隐含参数控制磁盘组中磁盘大容忍的不平衡比例,默认值是3%。 比如同一个磁盘组中,A磁盘的使用率不会和B磁盘使用率相差超过3%,否则会触发自动重平衡。

Processes

下面这个表总体概括了重平衡过程中,涉及到的后台进程:

Process Description
ARBn ASM重平衡进程,在磁盘组中进行数据区的重平衡,会有ARB0-ARB9和ARBA这些进程。
RBAL 在ASM实例中,该进程协调磁盘组中的重平衡过程。在DATABASE实例中,它管理ASM磁盘组。
Xnnn Exadata独有-ASM Disk Expel Slave Process(ASM磁盘驱逐进程)。负责ASM重平衡后的善后工作,它会在ASM重平衡后对磁盘机型删除操作。

在重平衡过程中,ARBn进程会在后台进程dump文件目录生成trace文件,记录重平衡的过程。

Views

在ASM实例中,V$ASM_OPERATION视图会显示在本实例上执行的时间较长的ASM操作,GV$ASM_OPERATION视图会展示集群中的所有节点上的执行的时间较长的ASM操作。

在重平衡的过程中,OPERATION字段会显示REBAL,STATE字段会显示重平衡操作的状态,POWER字段会显示重平衡的并行度,EST_MINUTES会显示重平衡操作还需要执行多长时间。

视图V$ASM_DISK用来显示ASM磁盘的相关信息,在rebalance期间,视图的STATE列展示了rebalance期间磁盘的当前状态。

Is your disk group balanced

通过在ASM实例中执行下面的命令,可以得到磁盘组上面数据平衡的状态。

SQL> column "Diskgroup" format A30
SQL> column "Imbalance" format 99.9 Heading "Percent|Imbalance" SQL> column "Variance" format 99.9 Heading "Percent|Disk Size|Variance" SQL> column "MinFree" format 99.9 Heading "Minimum|Percent|Free" SQL> column "DiskCnt" format 9999 Heading "Disk|Count" SQL> column "Type" format A10 Heading "Diskgroup|Redundancy" SQL> SELECT g.name "Diskgroup", 100*(max((d.total_mb-d.free_mb)/d.total_mb)-min((d.total_mbd. free_mb)/d.total_mb))/max((d.total_mb-d.free_mb)/d.total_mb) "Imbalance", 100*(max(d.total_mb)-min(d.total_mb))/max(d.total_mb) "Variance", 100*(min(d.free_mb/d.total_mb)) "MinFree",
count(*) "DiskCnt",
g.type "Type" FROM v$asm_disk d, v$asm_diskgroup g WHERE d.group_number = g.group_number and d.group_number <> 0 and d.state = 'NORMAL' and d.mount_status = 'CACHED' GROUP BY g.name, g.type;
Percent Minimum
Percent Disk Size Percent Disk Diskgroup
Diskgroup Imbalance Variance Free Count Redundancy ------------------------------ --------- --------- ------- ----- ---------- ACFS .0 .0 12.5 2 NORMAL DATA .0 .0 48.4 2 EXTERN
PLAY 3.3 .0 98.1 3 NORMAL
RECO .0 .0 82.9 2 EXTERN

注意:上面的查询摘录自Oracle Press book Oracle Automatic Storage Management, Under-the-Hood & Practical Deployment Guide, by Nitin Vengurlekar, Murali Vallath and Rich Long.

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!