ASM Setting Larger AU Sizes

eric0435發表於2016-12-01

ASM分配單元
ASM分配空間以chunks為單位,叫作分配單元(AUs)。一個AU是最細粒度的分配--每個ASM磁碟都以相 同大小的AU進行劃分。ASM 1MB條帶大小對於Oracle資料庫來說已經證明是最佳條帶深度並且將會支 持最大I/O請求。這個最佳條帶大小,再加上均勻分佈磁碟組中的區與RDBMS中的buffer cache,防止熱點。

對於VLDBs設定 Large AU Size
對於非常大的資料庫(VLDBs)--例如,資料庫大小為10TB與更大的來說,改變預設AU大小是有意義的 。以下是對於VLDB改變預設大小的優點:
.減小RDBMS例項中管理區對映的大小
.增加檔案大小限制
.減小資料庫開啟的時間,因為VLDB通常有許多大的資料檔案

增加AU大小可以提高oracle 10g開啟大資料庫的時間,也會減小區對映所消耗共享池的大小。使用 1MB AU與固定大小區,對於一個10TB資料庫來說區對映的大小大約是90MB,在開啟資料庫時會被讀取並被儲存在記憶體中。使用16M AU,對於10TB資料庫來說區對映大小減小為大約5.5MB。在Oracle 10g 中,一個檔案整個區對映是在檔案開啟時從磁碟進行讀取的。

Oracle 11g透過按需讀取區對映顯著的最小化了檔案開啟延遲問題。在Oracle 10g中,對於每個檔案 的開啟,完整的區對映需要構建並且從ASM例項傳送給RDBMS例項。對於大檔案,延長檔案開啟時間這 是不必要的。在oracle 11g中,在檔案開啟時只有區對映中的前60個區會被髮送。剩下的以批次方式被髮送到RDBMS。

在Oracle 11g中設定Large AU Size
對於Oracle 11g ASM系統,下面的create diskgroup命令可以被執行用來設定合適的AU大小:

SQL> CREATE DISKGROUP DATA DISK '/dev/raw/raw15', '/dev/raw/raw16',
'/dev/raw/raw17' ATTRIBUTE 'au_size' = '16M', 'compatible.asm' = '11.1'
'compatible.rdbms' = '11.1';

對Oracle 10g設定Large AU Size
在Oracle 10g中,ASM提供了兩個隱藏引數(_asm_ausize,_asm_stripesize)來允許你使用16MB的AU大小來建立磁碟組並且對於1MB(代 替128K)有更好的細粒度條帶。

SQL> set long 200
SQL> set linesize 200
SQL> select x.ksppinm NAME,y.ksppstvl value,x.ksppdesc describ
  2  from x$ksppi x, x$ksppcv y
  3  where x.inst_id=USERENV('Instance')
  4  and y.inst_id=USERENV('Instance')
  5  and x.indx=y.indx
  6  and x.ksppinm='_asm_stripesize';

NAME                           VALUE                DESCRIB
------------------------------ -------------------- ------------------------------
_asm_stripesize                131072               ASM file stripe size

SQL> select x.ksppinm NAME,y.ksppstvl value,x.ksppdesc describ
  2  from x$ksppi x, x$ksppcv y
  3  where x.inst_id=USERENV('Instance')
  4  and y.inst_id=USERENV('Instance')
  5  and x.indx=y.indx
  6  and x.ksppinm='_asm_ausize'
  7  ;

NAME                           VALUE                DESCRIB
------------------------------ -------------------- ------------------------------
_asm_ausize                    1048576              allocation unit size

AU引數只在建立磁碟組時才使用,而且在磁碟組建立之後現有磁碟組的AU大小是不會改變的。下面的例子使用16MB AU大小來建立一個磁碟組並且對所有資料庫檔案允許使用1MB的細粒度條帶。

1.關閉ASM例項

oracle@jyrac3 ~]$ export ORACLE_SID=+ASM1
[oracle@jyrac3 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Wed Nov 30 11:12:02 2016

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown


oracle@jyrac4 ~]$ export ORACLE_SID=+ASM2
[oracle@jyrac4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Wed Nov 30 11:12:02 2016

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown

2.編輯ASM例項的initSID.ora檔案增加以下引數:

[oracle@jyrac3 dbs]$ vi init+ASM1.ora
...省略...
#ASM AU 16MB
_asm_ausize=16777216
#ASM fine grain stripesize 1MB
_asm_stripesize=1048576

[oracle@jyrac4 dbs]$ vi init+ASM2.ora
...省略...
#ASM AU 16MB
_asm_ausize=16777216
#ASM fine grain stripesize 1MB
_asm_stripesize=1048576

3.重新ASM例項。為了使用新引數生效ASM例項必須重啟。在設定完隱藏引數並重啟ASM例項,在這之 後建立的磁碟組將使用新的AU大小與細粒度條帶大小。

SQL> col name for a20
SQL> col value for a20
SQL> col describ for a20
SQL> select x.ksppinm NAME,y.ksppstvl value,x.ksppdesc describ
  2  from x$ksppi x, x$ksppcv y
  3  where x.inst_id=USERENV('Instance')
  4  and y.inst_id=USERENV('Instance')
  5  and x.indx=y.indx
  6  and x.ksppinm='_asm_ausize';

NAME                 VALUE                DESCRIB
-------------------- -------------------- --------------------
_asm_ausize          16777216             allocation unit size

SQL> select x.ksppinm NAME,y.ksppstvl value,x.ksppdesc describ
from x$ksppi x, x$ksppcv y
  2    3  where x.inst_id=USERENV('Instance')
  4  and y.inst_id=USERENV('Instance')
  5  and x.indx=y.indx
  6  and x.ksppinm='_asm_stripesize';

NAME                 VALUE                DESCRIB
-------------------- -------------------- --------------------
_asm_stripesize      1048576              ASM file stripe size

4.建立磁碟組data_nrml

SQL> create diskgroup data_nrml  normal redundancy failgroup fg1 disk '/dev/raw/raw5'  failgroup fg2 disk '/dev/raw/raw6';

Diskgroup created.

5.查詢v$asm_diskgroup_stat或v$asm_diskgroup中的allocation_unit_size來驗證磁碟組data_nrml 的AU大小是否為16MB.

SQL> select name, allocation_unit_size from v$asm_diskgroup where name='DATA_NRML';

NAME                 ALLOCATION_UNIT_SIZE
-------------------- --------------------
DATA_NRML                        16777216

6.透過查詢v$asm_template檢視來檢視磁碟組data_nrml的ASM檔案模板,為了完成1MB的條帶大小需 要將磁碟組中所要儲存的所有檔案型別的條帶型別設定為FINE

SQL> select * from v$asm_template where group_number=2;

GROUP_NUMBER ENTRY_NUMBER REDUNDANCY   STRIPE       SY NAME
------------ ------------ ------------ ------------ -- --------------------
           2            0 MIRROR       COARSE       Y  PARAMETERFILE
           2            1 MIRROR       COARSE       Y  DUMPSET
           2            2 HIGH         FINE         Y  CONTROLFILE
           2            3 MIRROR       COARSE       Y  ARCHIVELOG
           2            4 MIRROR       FINE         Y  ONLINELOG
           2            5 MIRROR       COARSE       Y  DATAFILE
           2            6 MIRROR       COARSE       Y  TEMPFILE
           2            7 MIRROR       COARSE       Y  BACKUPSET
           2            8 MIRROR       COARSE       Y  AUTOBACKUP
           2            9 MIRROR       COARSE       Y  XTRANSPORT
           2           10 MIRROR       COARSE       Y  CHANGETRACKING
           2           11 MIRROR       FINE         Y  FLASHBACK
           2           12 MIRROR       COARSE       Y  DATAGUARDCONFIG
SQL> declare
  2  cursor jl is select * from v$asm_template where group_number=2 and STRIPE='COARSE';
  3  begin
  4      for r in jl loop
  5       execute immediate 'alter diskgroup data_nrml alter template '||r.name||'  attributes (fine)';
  6      end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> select * from v$asm_template where group_number=2;

GROUP_NUMBER ENTRY_NUMBER REDUNDANCY   STRIPE       SY NAME
------------ ------------ ------------ ------------ -- --------------------
           2            0 MIRROR       FINE         Y  PARAMETERFILE
           2            1 MIRROR       FINE         Y  DUMPSET
           2            2 HIGH         FINE         Y  CONTROLFILE
           2            3 MIRROR       FINE         Y  ARCHIVELOG
           2            4 MIRROR       FINE         Y  ONLINELOG
           2            5 MIRROR       FINE         Y  DATAFILE
           2            6 MIRROR       FINE         Y  TEMPFILE
           2            7 MIRROR       FINE         Y  BACKUPSET
           2            8 MIRROR       FINE         Y  AUTOBACKUP
           2            9 MIRROR       FINE         Y  XTRANSPORT
           2           10 MIRROR       FINE         Y  CHANGETRACKING
           2           11 MIRROR       FINE         Y  FLASHBACK
           2           12 MIRROR       FINE         Y  DATAGUARDCONFIG

這種改變的目的是儘管使用大AU設定,仍然保持1MB的檔案區分佈。如果使用預設的coarse條帶,那 麼將使用16MB進行條帶。在Oracle 11g中當使用可變區大小就不需要執行這種改變。

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

相關文章