首页 > 代码库 > ASM_PREFERRED_READ_FAILURE_GROUPS

ASM_PREFERRED_READ_FAILURE_GROUPS

    最近有一些客户有这样一个需求,一个ASM磁盘组中分别挂载不同性能的存储或磁盘。希望ASM在读取的时候,优先读取性能好的磁盘,性能差的磁盘更多的是扮演‘standby‘的角色。
    oracle提供一个参数ASM_PREFERRED_READ_FAILURE_GROUPS,来实现ASM优先读取的功能,但是以FAILURE_GROUP为单位实现的。我们可以将不同性能的存储(磁盘),分别划分到不同的FAILURE_GROUP,然后根据这个参数来指定优先读取哪个FAILURE_GROUP


关于参数说明
ASM_PREFERRED_READ_FAILURE_GROUPS specifies the failure groups that contain preferred read disks. Preferred disks are instance specific. This parameter is only valid in ASM instances.

下面就是在测试环境测试的过程:

1. 修改参数(无需重启instance,立即生效)

SQL> alter system set ASM_PREFERRED_READ_FAILURE_GROUPS=‘DATA.QR01CEL03‘;
System altered.

2. 检查修改结果

SQL> show parameter prefer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_preferred_read_failure_groups string DATA.QR01CEL03

下面是测试部分:
1. 查询修改后每个FAILGROUP的读取次数

SQL> select instname, failgroup, sum(reads), sum(writes) from v$asm_disk_iostat group by instname,failgroup order by 1,2;
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2                QR01CEL01  12608 5470
dbm2 QR01CEL02  3544   4529
dbm2 QR01CEL03  1997  4107

2. 另一个窗口2,执行read操作

select * from dba_objects;

3. 窗口1,可以看到,读取都是QR01CEL03上的reads是一直增加的,而其他的FAILGROUP是没有reads的

SQL> /
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2  QR01CEL01  12608  5492
dbm2  QR01CEL02  3545   4550
dbm2  QR01CEL03  2081   4128
SQL> /
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2  QR01CEL01  12608 5508
dbm2  QR01CEL02  3545  4560
dbm2  QR01CEL03  2102  4138
SQL> /
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2  QR01CEL01  12608  5561
dbm2  QR01CEL02  3546   4606
dbm2  QR01CEL03  2250   4185
SQL> /
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2  QR01CEL01  12608  5645
dbm2  QR01CEL02  3546   4669
dbm2  QR01CEL03  2414   4246

最后可以看到本次查询共读取2414-1997=417次。并且全部在FAILGROUP-QR01CEL03上。

4. 下面我们测试写入部分:

窗口1
SQL> /
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2  QR01CEL01  12619  5991
dbm2  QR01CEL02  3558   4957
dbm2  QR01CEL03  3389   4539
窗口2
SQL> create table test as select * from dba_objects;
窗口1
SQL> /
INSTNAME  FAILGROUP SUM(READS) SUM(WRITES)
---------------------------------------------------------------- -----------
dbm2  QR01CEL01  12621 6178
dbm2  QR01CEL02  3559  5097
dbm2  QR01CEL03  3720  4675

实际测试显示,对写操作是没有影响。
   写操作的测试--很白痴的行为,想想也是,data磁盘组是normal模式,一定会根据算法,将数据块分配到不同的FAILGROUP。也就不可能有优先写的概念。

    总结,很简单的一个参数设置,可以实现和实用的一个功能。


参考文档
Init.ora Parameter "ASM_PREFERRED_READ_FAILURE_GROUPS" Reference Note (Doc ID 567088.1)
ASM Reads From the Preferred Failure Groups With Compatible.Rdbms=10.2 If RDBMS is 11.1 (Doc ID 779807.1)
http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams013.htm#REFRN10279
ASMIOSTAT Script to collect iostats for ASM disks (Doc ID 437996.1)



本文出自 “小小狗窝” 博客,请务必保留此出处http://hsbxxl.blog.51cto.com/181620/1407678