ASM を味わう ~ DISK へのデータ配置を確認する ~ その10

投稿日: 2005年10月12日

<ASM を味わう ~ DISK へのデータ配置を確認する ~ その10>
ペンネーム:ダーリン

前回、ASM でデータ量はおおむねバランスされているが、I/O が偏っている
と言う状況が見られました。

そもそも、DISK Group を構成する各 DISK にはどのようにデータが格納され
ているのでしょうか?
ためしに、冗長性をはずした DISK Group を作成し、表領域を構成するデータ
ファイルがどのように配置されるかを見てみます。

まず、前回まで使用していた DISK Group は 5 本の DISK を使用して NORMAL
REDUNDANCY で作成したものでした。 この内いくつかの DISK を解放して
EXTERNAL REDUNDANCY で DISK Group を作成しましょう。
ちなみに解放できる DISK は、3つまでです。なぜなら、それ以上解放すると、
NORMAL REDUNDANCY では、2重化が出来なくなるからです。

5 – 3 = 2

なので、今回は、3DISK を解放し、これを使って DISK Group を作成します。

SQL> create diskgroup dg_0001 external redundancy
  2  disk
  3  '/dev/raw/raw3' name disk_001 size 10236m ,
  4  '/dev/raw/raw4' name disk_002 size 10236m ,
  5  '/dev/raw/raw5' name disk_003 size 10236m
  6  ;

Diskgroup created.

ちなみこの DISK Group の割り当て単位は、1MB です。

SQL> select name,allocation_unit_size ,type from v$asm_diskgroup
  2  where name = 'DG_0001';

NAME                ALLOCATION_UNIT_SIZE TYPE
------------------- -------------------- ------
DG_0001                          1048576 EXTERN

この DISK Group に表領域を作成します。
小さな表領域を作成して見ましょう。今回は 3 DISK で構成されていますの
で、まず 3 MB で作成してみましょう。DISK Group の割り当て単位も 1MB
なので、それぞれの DISK に均等に 1MB づつ割り当てられるはずです。

<>

SQL> select group_number,disk_number,total_mb,free_mb,name,path
  2  from v$asm_disk;

GROUP_NUMBER DISK_NUMBER TOTAL_MB    FREE_MB NAME       PATH
------------ ----------- ---------- ---------- ---------- ---------------
           2           2 10236      10220 DISK_003   /dev/raw/raw5
           2           1 10236      10220 DISK_002   /dev/raw/raw4
           2           0 10236      10214 DISK_001   /dev/raw/raw3
           1           1 10236       9355 DATA_0001  /dev/raw/raw2
           1           0 10236       9355 DATA_0000  /dev/raw/raw1

<>

SQL> create tablespace test001 datafile '+DG_0001' size 3m
  2  autoextend on next 1m uniform size 1m
  3  segment space management auto;

Tablespace created.

<>

SQL> select group_number,disk_number,total_mb,free_mb,name,path
2  from v$asm_disk;
GROUP_NUMBER DISK_NUMBER TOTAL_MB    FREE_MB   NAME       PATH
------------ ----------- ---------- ---------- ---------- ---------------
           2           2 10236           10218 DISK_003   /dev/raw/raw5
           2           1 10236           10219 DISK_002   /dev/raw/raw4
           2           0 10236           10213 DISK_001   /dev/raw/raw3
           1           1 10236            9355 DATA_0001  /dev/raw/raw2
           1           0 10236            9355 DATA_0000  /dev/raw/raw1

DISK_001 から DISK _003 空き容量が減っているので、ここに表領域が作成さ
れたことが予想できます。

それぞれのデータ量は、、

DISK_001 10214 - 10213 = 1MB
DISK_002 10220 - 10219 = 1MB
DISK_003 10220 - 10218 = 2MB
-------- --------------- ---
               合計      4MB

3MB の表領域を作成しましたが、4MB 減ってしまいました。
これは、”ASM を味わう その3” で確認したときと同じ状況です。

SQL> l
  1  select a.name              FILE_NAME
  2  ,b.blocks                  USED_BLOCKS
  3  ,trunc(b.bytes/1024/10024) USED_MBytes
  4  ,trunc(b.space/1024/1024)  ALLOCATE_MBytes
  5  ,type                      TYPE
  6  from v$asm_alias a,v$asm_file b
  7  where a.group_number = b.group_number
  8  and a.file_number = b.file_number
  9* and a.file_incarnation = b.incarnation
SQL> /

FILE_NAME            USED_BLOCKS USED_MBYTES ALLOCATE_MBYTES TYPE
-------------------- ----------- ----------- --------------- ---------------
SYSTEM.256.1               56321          44             885 DATAFILE
SYSAUX.257.1               26881          21             425 DATAFILE
UNDOTBS1.258.1              3201           2              52 DATAFILE
USERS.259.1                  641           0              12 DATAFILE
Current.260.3                175           0              16 CONTROLFILE
Current.261.3                175           0              16 CONTROLFILE
group_1.262.1              20481           1              32 ONLINELOG
group_1.263.1              20481           1              32 ONLINELOG
group_2.264.1              20481           1              32 ONLINELOG
group_2.265.1              20481           1              32 ONLINELOG
group_3.266.1              20481           1              32 ONLINELOG
group_3.267.1              20481           1              32 ONLINELOG
TEMP.268.1                  2561           2              42 TEMPFILE
spfile.269.1                   5           0               2 PARAMETERFILE
spfileora101.ora               5           0               2 PARAMETERFILE
USERS.270.1                 1281           1              22 DATAFILE
TEST001.256.1                385           0               4 DATAFILE
~~~~~~~~~~~~~~                                          ~~~~~

では、次は、6MB 、、ではなく、5MB で作成してみます。すると、

GROUP_NUMBER DISK_NUMBER TOTAL_MB    FREE_MB   NAME       PATH
------------ ----------- ---------- ---------- ---------- ---------------
           2           2 10236           10218 DISK_003   /dev/raw/raw5
           2           1 10236           10218 DISK_002   /dev/raw/raw4
           2           0 10236           10212 DISK_001   /dev/raw/raw3
           1           1 10236            9355 DATA_0001  /dev/raw/raw2
           1           0 10236            9355 DATA_0000  /dev/raw/raw1

それぞれのデータ量は、、

   DISK_001 10214 - 10212 = 2MB
   DISK_002 10220 - 10218 = 2MB
   DISK_003 10220 - 10218 = 2MB
   -------- --------------- ---
                  合計      6MB

きれいに、2MB づつ減少しています。
オーバーヘッドの分も含めて、きれいに均等配置されています。

同様に 10MB 、14MB と、100MB でも見てみました。

10MB の表領域:

   DISK_001 10214 - 10211 =  3MB
   DISK_002 10220 - 10216 =  4MB
   DISK_003 10220 - 10216 =  4MB
   -------- --------------- ----
                  合計      11MB

14MB の表領域:

   DISK_001 10214 - 10209 =  5MB
   DISK_002 10220 - 10215 =  5MB
   DISK_003 10220 - 10215 =  5MB
   -------- --------------- ----
                  合計      15MB

100MB の表領域:

   DISK_001 10214 - 10181 =  34MB
   DISK_002 10220 - 10186 =  34MB
   DISK_003 10220 - 10186 =  33MB
   -------- --------------- -----
                  合計      101MB

どうやら、データ量的にみて均等に配置されるというのは間違いないようです。
(少なくとも 1 つのデータファイルとしては)

来週は、この環境を使って、I/O バランスを崩してみます。

うんど~か~い チャッチャチャチャ!! 雨に負けるな@茅ヶ崎にて