Oracle ASM 翻译系列第十四弹:ASM Internal 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 plan,ASM会计算出重平衡的计划。计划取决于很多因素,例如磁盘组大小、磁盘组中的文件个数、磁盘的partnership是否需要调整等等。这个过程时间不会太长,一般不会超过几分钟。

· 第二阶段-extent relocating,是真正干活的阶段,这个阶段,ASM的区会在磁盘组中的磁盘间移动,这个过程会花费大部分的时间。这个过程中,ASM会记录区的移动数量,以及实际的I/O性能,从而估算该过程需要花费的时间(GV$ASM_OPERATION.EST_MINUTES记录估算出的时间)。不过要注意的是,这只是估算的时间,真正的花费时间还取决于整体负载(特别是磁盘相关的负载)。如果重平衡是由于磁盘组中的一个或者多个磁盘损坏造成的,那么这个阶段还会对不满足冗余度要求的数据做镜像。

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

· 第三阶段是磁盘的compacting阶段(ASM 11.1.0.7版本及以上支持),这个过程是将磁盘上存的数据尽可能的移动到磁盘的外圈磁道上去(机械盘的外圈速度更快),以提供更高的性能。需要注意的是,在这个阶段,GV$ASM_OPERATION.EST_MINUTES会一直显示为0,这个显示为0的“特性”将来可能会被优化。这个阶段所花费的时间,取决于磁盘组中磁盘的数量、重平衡的原因等等,一般情况下,这个阶段花费的时间会比第二阶段短很多。

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

· 重平衡是以文件为基本操作单位的,跟过arb进程的跟踪文件可以观察到。

· 一个正在进行的重平衡可能会被重启,例如存储的配置改变(我们修改了配置或者由于故障导致配置改变),如果是人为导致了重平衡的失败,那么需要手工的触发重平衡才行。

· 在同一个集群中,每个实例只能有一个磁盘组在做重平衡操作。如果同时指定多个磁盘组做重平衡,那么ASM会尽量把重平衡动作在集群中可用节点上并行执行,如果没有其他可用节点了,那么就会串行执行。

· 重平衡过程中,如果遇到ASM实例重启,那么实例起来后重平衡操作会继续进行。

· 在执行ALTER DISKGROUP 命令对磁盘进行添加、删除、调整大小时,可以指定REBALANCE子句,以及相关的POWER值、WAIT/NOWAIT选项。

Tuning rebalance operations

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

· 执行ALTER DISKGROUP 进行磁盘组操作时,不指定POWER参数

· 当隐式的触发重平衡时,如对磁盘组中磁盘进行添加/删除/调整大小

我们可以动态的调整该参数,从而调整重平衡的并行度。高的并行度会缩短重平衡的花费时间,但是时间并不是随着并行度递增而线性减少,这取决于存储的整体负载、可用的吞吐量和底层磁盘的响应速度。

在重平衡过程中,我们可以动态调整并行度。通过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时,会禁止重平衡操作。

· 将磁盘组的COMPATIBLE.ASM参数设置为11.2.0.2及以上,ASM_POWER_LIMIT的取值范围是0-1024。

· 当COMPATIBLE.ASM参数被设置为11.2.0.2之前时,ASM_POWER_LIMIT的取值范围是0-11。

· 当你通过ALTER DISKGROUP REBALANCE命令将POWER值指定为0时,会停止重平衡操作。(除非你触发 Bug 7257618)。

_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.


时间: 2024-09-08 19:46:31

Oracle ASM 翻译系列第十四弹:ASM Internal Rebalancing act的相关文章

Oracle ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete

When will my rebalance complete "磁盘组的rebalance什么时候能完成?",这个问题我经常被问到,但是如果你期望我给出一个具体的数值,那么你会失望,毕竟ASM本身已经给你提供了一个估算值(GV$ASM_OPERATION.EST_MINUTES),其实你想知道的是rebalance完成的精确的时间.虽然我不能给你一个精确的时间,但是我可以给你一些rebalance的操作细节,让你知道当前rebalance是否正在进行中,进行到哪个阶段,以及这个阶段是

Oracle ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility

amdu - ASM Metadata Dump Utility ASM Metadata Dump Utility,即ASM元数据导出工具,它的简写amdu更被人所熟知,常被Oracle技术支持人员和Oracle开发人员用来诊断和解决ASM故障.它能输出ASM的元数据信息并且从ASM磁盘组中抽取元数据和数据文件. amdu工具不依赖于ASM实例或者ASM磁盘组的状态,所以它能在ASM实例关闭和磁盘组未挂载的情况下正常使用,它甚至能在ASM磁盘出现故障或者不可见的场景下使用. Use amdu

Oracle ASM 翻译系列第十五弹:ASM Internal ASM File Directory

本篇主要介绍ASM的1号文件,ASM的1号文件是ASM的文件目录,它记录了磁盘组中的所有文件信息,由于在ASM中,每一个磁盘组都是独立的存储单元,所以每一个磁盘组都会有属于它自己的文件目录. 虽然这是一个内部的文件,但ASM实例会把它当做其它ASM文件一样管理,在ASM的文件目录中也会有它自己的条目(指向了它自己),在一个normal和high冗余的磁盘组中,它也会做镜像,随着新文件的产生,文件目录的大小也会相应地增长. 每一个ASM文件目录的条目都会包含如下的信息: · 文件大小 · 文件块大

Oracle ASM 翻译系列第十八弹:ASM Internal ASM file number 5

ASM file number 5 本章讲述ASM的5号文件,5号文件是ASM的模板目录,包含了磁盘组中所有的文件模板的信息. 有两种类型的模板:一种是系统自带的,一种是用户创建的,默认的模板(系统自带的)已经包含ASM的所有文件类型,创建文件时会根据文件类型自动匹配,用户创建的模板只会在用户特别指定时会使用. 每一个模板包含了如下的一些信息: · 每个模板的名称(对于默认模板它的名称其实就是文件类型) · 文件冗余度(默认是磁盘组的冗余度) · 文件条带(默认是根据文件类型来决定文件的条带)

Oracle ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table

Partnership and Status Table Partnership and Status Table简称PST表包含了一个磁盘组中所有磁盘的相关信息-磁盘号,磁盘状态,partner的磁盘号,心跳信息和failgroup的信息(11G及以上版本). 每个磁盘的AU 1是为PST表预留的,但是并不是每一个磁盘都有PST表的信息. PST count 在external冗余的磁盘组中只有一份PST表. 在normal冗余的磁盘组中,至少有两份PST表.如果磁盘组中有三个或更多的fail

Oracle ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data

Where is my data 有时候我们想要知道一个特定的database block位于ASM的哪个磁盘,磁盘的哪个AU以及AU的哪一个块.本篇文章将向大家展示如何解决这个问题. Database Instance 首先在数据库里创建测试表空间: SQL> create tablespace T1 datafile '+DATA'; Tablespace created. SQL> select f.FILE#, f.NAME "File", t.NAME "

Oracle ASM 翻译系列第二十二弹:ASM Internal ASM file number 8

ASM file number 8 ASM元信息8号文件是磁盘空间使用目录Used Space Directory,简称USD,它记录了每个ASM磁盘组中每个磁盘的每个zone上被使用的AU数.一个磁盘的zone包含hot zone-热区(磁盘外圈,译者注)和cold zone-冷区(磁盘内圈,译者注).USD目录为每个磁盘提供了一个条目,条目信息记录了2个zone(COLD和HOT)的AU使用数. USD结构是在11.2版本中引入的,并且与智能数据存放特性有关.USD元数据文件在ASM兼容性参

Oracle ASM 翻译系列第十六弹:ASM Internal ASM Active Change Directory

ASM Active Change Directory 当ASM实例要对多个元信息block进行原子修改时,ASM的active change directory 简称ACD会记录相应的日志,ACD是ASM元信息的3号文件.对应的日志记录会以单次IO的方式写入,来确保操作原子性. ACD被分成多个chunk或者thread,每个运行中的ASM实例都有它自己的42MB大小的chunk.当一个磁盘组被创建时,会分配一个独立的chunk给ACD.随着更多的实例挂载了该磁盘组,ACD的chunk数也会同

Oracle ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table

Free Space Table 在进行创建文件或者文件resize过程中,需要有一个快捷入口,可以迅速的知道当前磁盘有哪些可用的(free状态的)AU,ASM Free Space Table 简称FST表就是提供一个这样的功能,通过它可以快速的知道哪些allocation table(AT表)元数据块中有空闲的AU,它存储的是一个个的AT表元数据块的号码,FST表用来加速AU的分配,避免读取已经完全被占用殆尽的AT块,造成分配空间效率的低下. FST表技术上说其实是属于AT表的一部分,位于A