11g ASM asm_preferred_read_failure_group

eric0435發表於2016-11-24

ASM優先讀取
asm_preferred_read_failure_group引數被用來指定一個故障磁碟組列表,它指定了RAC中每個節點的本地讀取方式。asm_preferred_read_failure_group格式如下:
asm_preferred_read_failure_groups=diskgroup_name.failuregroup_name,...
每個條目包含了diskgroup_name,它是磁碟組名字,failuregroup_name,它是磁碟組所使用的故障磁碟組名字,這兩個變數使用一個句號進行分隔。多個條目可以使用逗事情進行分隔。這個 引數可以進行動態修改。

在extended rac中,為asm_preferred_read)failure_groups引數所指定的故障磁碟組應該只包含本地節點中的磁碟,v$asm_disk中的preferred_read列指示了優先讀取磁碟。

注意,當增加或刪除磁碟時,最佳的方法是從儲存將要發生改變的節點執行增加或刪除命令。這能更有效的執行重新平衡,因為區重新定位使用同樣的故障磁碟組進行本地化--,也就是相同節點。

下面的例子將顯示如何部署優先讀取功能與展現其一些優點。這個例子演示當asm_preferred_read_failure_groups引數沒有設定時的I/O模式,以及修改引數之後對I/O的影響。

1.建立有兩個故障磁碟組的ASM磁碟組data_nrml,其中raw5/6/7磁碟是與節點1在一個機房,raw/12/13/14磁碟是與節點2在另一個機房:

SQL> create diskgroup data_nrml normal redundancy
  2  failgroup fg1 disk '/dev/raw/raw5','/dev/raw/raw6','/dev/raw/raw7'
  3  failgroup fg2 disk '/dev/raw/raw12','/dev/raw/raw13','/dev/raw/raw14';
Diskgroup created.

2.在節點2,建立表測試表t1

SQL> create table t1 as select * from dba_tables;

Table created.

SQL> insert into t1 select * from t1;

3668 rows created.
.....
SQL> /

SQL> /
1467392 rows created.
SQL> commit;

Commit complete.

SQL> alter system flush buffer_cache;

System altered.


3.查詢磁碟組的讀寫I/O累計資訊,可以看到例項1中的FG1,FG2的讀寫分別為169,176,例項2中的FG1,FG2的讀寫分別為43,59

SQL> set long 9999
SQL> set linesize 9999
SQL> select inst_id, failgroup, sum(reads), sum(writes) from gv$asm_disk where failgroup in ('FG1','FG2') group by inst_id, failgroup;

   INST_ID FAILGROUP                                                    SUM(READS) SUM(WRITES)
---------- ------------------------------------------------------------ ---------- -----------
         1 FG1                                                                 169        3809
         1 FG2                                                                 176        3809
         2 FG1                                                                  43       17201
         2 FG2                                                                  59       17201

4.執行查詢:

SQL> show parameter asm_preferred_read_failure_groups

NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
asm_preferred_read_failure_groups    string

SQL> set timing on
SQL> select count(*) from jy.t1;

  COUNT(*)
----------
   1467392
Elapsed: 00:00:07.23

5.再次查詢磁碟組的讀寫I/O累計資訊,可以看到例項1中的FG1,FG2的讀寫分別為450,564,比之前增加了450-169=281,564-176=388,例項2中的FG1,FG2的讀寫分別為85,99,比之前加了85- 43=42,99-59=40,從這些資料可以看到,獲取資料時同時訪問了兩個故障磁碟組,因為我的資料是在節點2進行插入的,顯示的讀取I/O資料從故障磁碟組FG2的還要比FG1稍微多點,執行時間為7秒。

SQL> select inst_id, failgroup, sum(reads), sum(writes) from gv$asm_disk where failgroup in ('FG1','FG2') group by inst_id, failgroup;

   INST_ID FAILGROUP                                                    SUM(READS) SUM(WRITES)
---------- ------------------------------------------------------------ ---------- -----------
         1 FG1                                                                 450        8879
         1 FG2                                                                 564        8879
         2 FG1                                                                  85       38166
         2 FG2                                                                  99       38166

6.設定 asm_preferred_read_failure_groups引數,讓節點1優先從故障磁碟組FG1進行讀取,讓節點2優先從故障磁碟組FG2進行讀取

SQL> alter system set asm_preferred_read_failure_groups='DATA_NRML.FG1' scope=both sid='+ASM1';

System altered.

SQL> alter system set asm_preferred_read_failure_groups='DATA_NRML.FG2' scope=both sid='+ASM2';

System altered.

7.檢查例項的優先讀取磁碟組資訊,從下面的查詢結果可以看到,例項1的優先讀取故障磁碟組為FG1,例項2為FG2:

SQL> select inst_id, failgroup, name, preferred_read from gv$asm_disk where failgroup in ('FG1','FG2') order by inst_id, failgroup;

   INST_ID FAILGROUP                                                    NAME                                                         PR
---------- ------------------------------------------------------------ ------------------------------------------------------------ --
         1 FG1                                                          DATA_NRML_0002                                               Y
         1 FG1                                                          DATA_NRML_0000                                               Y
         1 FG1                                                          DATA_NRML_0001                                               Y
         1 FG2                                                          DATA_NRML_0003                                               N
         1 FG2                                                          DATA_NRML_0005                                               N
         1 FG2                                                          DATA_NRML_0004                                               N
         2 FG1                                                          DATA_NRML_0001                                               N
         2 FG1                                                          DATA_NRML_0000                                               N
         2 FG1                                                          DATA_NRML_0002                                               N
         2 FG2                                                          DATA_NRML_0004                                               Y
         2 FG2                                                          DATA_NRML_0003                                               Y
         2 FG2                                                          DATA_NRML_0005                                               Y

12 rows selected.

8.在節點1開啟會話再次執行查詢

SQL> alter system flush buffer_cache;

System altered.
SQL> set timing on
SQL> select count(*) from jy.t1;

  COUNT(*)
----------
   1467392
Elapsed: 00:00:03.26

9.再次查詢磁碟組的讀寫I/O累計資訊,可以看到例項1中的FG1,FG2的讀寫分別為867,567,比之前增加了867-450=417,567-564=3,例項2中的FG1,FG2的讀寫分別為88,102,比之前加了88- 85=3,102-99=3,從這些資料可以看到,獲取資料時基本上都是訪問的故障磁碟組FG1,從這些資料可以看到,例項1也基本上都是訪問的故障磁碟組FG1,對FG2讀取次為3,例項2對於故障磁碟組 FG1,FG2的訪問次數為3,都很少,執行時間從7秒變為了3秒。

SQL> select inst_id, failgroup, sum(reads), sum(writes) from gv$asm_disk where failgroup in ('FG1','FG2') group by inst_id, failgroup;

   INST_ID FAILGROUP                                                    SUM(READS) SUM(WRITES)
---------- ------------------------------------------------------------ ---------- -----------
         1 FG1                                                                 867        8891
         1 FG2                                                                 567        8891
         2 FG1                                                                  88       38166
         2 FG2                                                                 102       38166

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2128983/,如需轉載,請註明出處,否則將追究法律責任。

相關文章