ASMLibに関する検証 その5

<ASMLibに関する検証 その5>
ペンネーム: ソラ

今回も引き続き、ASMLib Kernel Driver(以下、ASMLib)に関する検証を行いま
す。

■前回までのおさらい
前回までの確認によってASMLibを使用することで、いろいろな場
面で作業者を助けてくれることがわかりました。

今回は、ASMLibのもう一つのメリット、I/O処理の効率がよくなる
(パフォーマンスが向上する)ことについて検証します。

■■■■■概要■■■■■
1.データベースにおいてのI/O処理
2.検証手順
3.検証結果
4.まとめ

■検証環境
Red Hat Enterprise Linux Server release 5
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0

1.データベースにおいてのI/O処理
まず、I/O処理の効率とは具体的に何の機能を検証すれば比較できるか考えま
す。
以下、データベースの処理において、I/Oが発生する主な状況です。

INSERT文、UPDATE文、DELETE文など、データファイルに更新がかかる状況

SELECT文、UPDATE文、DELETE文など、データファイル上のデータを読み込む必
要がある状況

尚、今回の検証では、I/Oの両方が発生してしまう、UPDATE文とDELETE文につ
いては効果を比較しにくいため、検証対象から除外します。
そのため、今回はディスクへの書き込みについてはINSERT文で、ディスクから
の読み込みについてはSELECT文で前回までの手順の比較をした際と同様に、
RAWデバイスを使用した場合と、ASMLibを使用した場合で比較していきます。

2.検証手順
今回はディスクからの読み込みと書き込みの検証を以下の手順でそれぞれ5回
ずつ行います。
そして、その実行時間を元に比較します。

[ディスクへの書き込みの検証手順(INSERT文)]
(1) Oracleインスタンスを再起動
(2) 2GBの表領域を作成
(3) 検証用の表を作成
(4) INSERT文を実行(約1GBのデータを表に挿入)

conn / as sysdba

--インスタンスの再起動
shutdown immediate
startup

set echo on
set timing on

--既存表の削除
drop table test_tbl;

--既存表領域の削除
drop tablespace test_tbs;

--表領域の作成
create tablespace test_tbs datafile '+DISKGROUP1' size 2048M;

--表の作成
create table test_tbl(
col1 char(1000),
col2 char(1000),
col3 char(1000),
col4 char(1000),
col5 char(1000),
col6 char(1000),
col7 char(1000),
col8 char(1000),
col9 char(1000),
col10 char(1000)
) tablespace test_tbs;

--データの挿入
begin
for i in 1..100000 loop
insert into test_tbl (
col1,col2,col3,col4,col5,col6,col7,col8,col9,col10)
values (
lpad('A',1000,'A'),
lpad('B',1000,'B'),
lpad('C',1000,'C'),
lpad('D',1000,'D'),
lpad('E',1000,'E'),
lpad('F',1000,'F'),
lpad('G',1000,'G'),
lpad('H',1000,'H'),
lpad('I',1000,'I'),
lpad('J',1000,'J'));
commit;
end loop;
end;
/

[ディスクからの読み込みの検証手順(SELECT文)]
(1) Oracleインスタンスの再起動
(2) SELECT文の実行(約1GBの表データを取得)

--インスタンスの再起動
shutdown immediate
startup

set echo on
set lin3000
set pages1000
set timing on

set autot traceonly

--データの取得
select * from test_tbl;

3.検証結果
スクリプトの実行結果はそれぞれ以下のようになりました。

▼INSERT文

実行回数 RAWデバイス ASMLib
-------- ----------- --------
1回目    01:07.70    01:03.81
2回目    01:09.13    01:01.26
3回目    01:04.20    01:07.94
4回目    01:16.19    01:01.19
5回目    01:03.90    01:03.01



RAWデバイス:01:16.19
ASMLib     :01:07.94


RAWデバイス:01:03.90
ASMLib     :01:01.19


RAWデバイス:01:08.22
ASMLib     :01:03.37

▼SELECT文

実行回数 RAWデバイス ASMLib
-------- ----------- --------
1回目    00:20.34    00:20.92
2回目    00:20.89    00:20.34
3回目    00:20.35    00:20.39
4回目    00:20.18    00:20.19
5回目    00:20.24    00:20.25



RAWデバイス:00:20.89
ASMLib     :00:20.92


RAWデバイス:00:20.18
ASMLib     :00:20.19


RAWデバイス:00:20.40
ASMLib     :00:20.42

上記の検証結果を見る限り、ASMLibを使用している場合ではINSERT文、つまり
ディスクへの書き込み処理では少しですが効果があるように見えます。
しかし、SELECT文(ディスクからの読み込み)の処理では、あまり変化がないよ
うに見えます。
ただ、SELECT文のようなデータを読み込む処理の際には、通常はディスクより
断然高速なバッファ上からデータを読み込めるようにするほうがより効率的で
す。
そのため、そもそもASMLibでディスクからの読み込み性能の向上を期待するこ
と自体がデータベースの処理性向上の主旨とは違うのかもしれません。
つまり、ASMLibを使用することでデータベースのディスクへの書き込み性能が
向上するということは十分なメリットであると言えます。

4.まとめ
検証結果より、ASMLibを使用することで、ディスクへの書き込みの処理性能向
上につながることがわかりました。

どのような処理でASMLibの恩恵を受けられるのかわかったところで、
今回はここまで!

次回は、いよいよ最終回!!
RAWデバイスとASMLibを使用した場合で、なぜディスクへの書き込みのみの実
行時間に違いがでたのか?というところに注目して検証していきます。

ドバイでウオッカにダイワスカーレットの分もがんばってほしい!!
恵比寿より