Oracle新人のRACインストール その6

投稿日: 2006年6月07日

<Oracle新人のRACインストール その6>
ペンネーム: world famous beagle

先週、先々週と書いてきた共有ディスクの設定についてですが、岸田さんより、
つっこみが入っております。

「印旛くん、ちょっと」
「はい」
「共有ディスクについてのメルマガだけど、

>もう1つのストライピングっていうのは、データをチャンクという塊にわけて、
>それを複数の物理ディスクに同時に書き込むこと。
>つまり、3本の物理ディスクがあれば、1本の時の1/3の転送時間になる。

ここは、RAIDについて、ちょっと認識が違ってるね。ASYNC I/Oをもう少し理解
して直して」
「あ、わかりました。どの辺がずれてますか?」
「調べればわかるから。あと、

>「なるほど、いくら、RAWデバイスが更新情報を管理しなくていいといっても、
>キャッシュにデータが載っていたら、当然ファイルシステムの方が高速に処理
>できるもんね」

って書いてあったけど、だったらなぜ、RAWデバイスを使う必要があるの?」
「・・・・・」
「じゃあそれも調べてね」
「はい」

「たしかに、ASYNC I/OとかRAIDとか色々出てきたから、頭を少し整理しなきゃ
な。早速、なぜRAWデバイスを使うのか、から調べてみよう」

「そもそもなぜ、ASYNC I/OやRAIDを使うかというと、ディスクアクセスをでき
るだけ少なくしたいというのが理由なんだよな」

メモリのアクセス時間の単位 → ナノセコンド(10の-9乗)
ディスクのアクセス時間の単位 → ミリセコンド(10の-3乗)

「アクセス時間の単位を見ても、ディスクアクセスがメモリアクセスよりかなり
遅いのはわかるよね。これは、常に念頭において考えよう」

—–OracleとRAWデバイス—–
なぜ、RAWデバイスを使うのか?
RAWデバイスは、ファイルシステムとは違いファイルキャッシュを使わずに、直
接ディスクへの書き込み、読み込み処理を行います。
このため、先週のメルマガで書いたように、もし、キャッシュに欲しいデータが
載っていた場合は、ファイルシステムの方がRAWデバイスよりも高速にデータを
読み込むことが出来ます。

ただし、Oracleを使用する場合、Oracle自身がバッファキャッシュを持っている
ため、ファイルシステムを使わなくても、そこにデータを載せておくことができ
ます。
このため、上記のRAWデバイスの短所を補うことが出来るといえます。
そして、先週も書いたとおり、RAWデバイスは、ファイルシステムの更新情報を
管理しないため、更新、追加処理がファイルシステムに比べ高速化できるという
理由で、更新処理が多いようなデータベースの管理にマッチしているといえます。

「なるほど。ということは、検索だけをするようなデータベースならば当然、
ファイルシステムを使った方がいいってことだな。
今までは、Oracleについてあまり意識してなかったけど
そういうことだったのか」

—–RAID5の弱点—–
「岸田さん、やっとわかってきた気がします」
「ふーん、じゃあRAID5の弱点は何?」
「え?えっと、書き込みの速度が遅いことじゃないですか?」
「なんで?」
「・・・・・。わかりません」
「じゃあ、調べて」
「はい」

本当に僕は、RAIDを理解していっているんだろうか・・・。

「斉藤くん、RAID5の弱点って何?”書き込み速度が遅い”見たいな事は
なんかの資料に書いてあった気がするんだけど」
「Oracleには、RAID0+1が最も適しているといわれてますね。RAID5には、
パリティがありますから」
「パリティに関係あるってこと?パリティっていうのは、”障害復旧時に必要
となる情報”ってやつだよね?」
「そうですね。パリティには、排他的論理和を使って計算された値が格納されて
いるので・・・」
「ハイタテキロンリワ?(なんか太宰治みたいだけど・・・)」
「パリティは、印旛さんの言ったとおり障害復旧に必要な情報のことです。
これがRAID5の弱点になるというのは、書き込み速度が確かに落ちることです。
なぜかというと、パリティを作るのにI/Oがかなり必要になるからです」
「・・・・・。わかんない」
「パリティっていうのを作るから、例えばRAID0とか1の時は、データを書き
出すだけなのに比べて、書き込み量自体が増えるから、書き込むのに時間が
かかる、っていうのとは違うの?」
「それとは、少し違いますね」
「あ、違うの?」
「パリティっていうのは、障害復旧に必要な情報なんですけど、これは、実際
のデータから計算されているんです。
大まかに言うと、例えば、3本のディスクでRAID5を構成しているとして、そのパ
リティを作成するには、それぞれのデータを読み込んで、そこからパリティを
計算して、その後パリティ情報をディスクに書き込みます。このことからも、
かなりRAID0や1に比べてディスクのI/Oがかなり多いことがわかります。これが
書き込み速度が遅い原因です」
「うーん。なるほど。
つまり、RAID0や1は、書き込みだけをしているのに、RAID5は、データを
読む→計算する→書くをしているから遅いってこと?」
「はい。おおまかには、そんな理解だと思います」
「うん。ありがとう斉藤くん」

岸田さんに報告だ!

「岸田さん、わかりました」
「うん、今聞いてたけど、まだまだだね」
「え、そうですか・・・・」
「ASYNC I/Oは?」
「あ、これからです」

そういえば、パッケージの確認をした時に、libaioっていうパッケージがあった
けど、そのパッケージって、”library async i/o”だったような気がするな。
それしかわからないけど・・・。とにかくOracleに関係はあるみたいだな。

(先週のメルマガより)
—–ASYNC I/0—–
ASYNC I/Oとは、非同期書き込み機能のことをいいます。
書き込み処理をパラレル実行することで、ディスクへの転送速度を上げることが
出来ます。
物理ディスクへの書き込みは、通常、1つの物理ディスクへの書き込みが終了し
てから、次のディスクへの書き込みがされます。
つまり、ASYNC I/Oを活用しても、ディスクが1本しかないような状況では、処理
がキューイングされるだけで、転送速度はあがりません。

—–印旛くんの疑問—–
「ASYNC I/Oがどんなものかは、わかるけど、RAID構成で今回のように、ハード
ウェアRAIDの場合は、RAIDコントローラもI/Oを分散してるんじゃないのかな?
あれ、なんかよくわかんなくなってきちゃったぞ。
ASYNC I/Oであっても、複数ディスクでなければ処理がキューイングするだけで、
I/O分散の効果は得られないんだったよね。
けど、RAID構成にした場合、複数ディスクはOSから見れば1つのディスクにみえ
てるんじゃ???」

☆そんな印旛くんのために
まず、整理すべきはASYNC I/O、RAWデバイス、RAIDの関係性です。

ASYNC I/Oは、OS側のI/O分散機能です。
RAWデバイスは、ディスク管理の方法の1つです。
そして、RAIDコントローラはあくまでも、ディスク自体をRAID構成で管理し、
データ分散を行うものです。
このように考えるとそれぞれは全く違った役割を担っています。

2段階に分けて考えると、よりわかりやすいかもしれません。

物理ディスクへの、I/O分散 → RAIDコントローラが必要
RAWデバイスへのデータ転送速度の高速化、OS側のI/O待ちを防ぐ → ASYNC I/O

「うーん。なるほど、RAWデバイスっていうのは、あくまでもRAIDの上にある
論理的なパーティションだったんだよね。ASYNC I/OとRAIDは直接的な関係が
あるわけじゃないんだな。きちんとわけて考えればよかったのか。わかってき
たな」

岸田さんの言っていた、先々週のメルマガの

>もう1つのストライピングっていうのは、データをチャンクという塊にわけて、
>それを複数の物理ディスクに同時に書き込むこと。
>つまり、3本の物理ディスクがあれば、1本の時の1/3の転送時間になる。

という認識がなぜずれているのか?

これは、RAIDコントローラの動作についてのことだよね。
RAIDコントローラの動作、RAIDコントローラの動作、RAIDコントローラの・・・

「あ!そういえばストライピングサイズっていうのがあるな。これが関係あり
そうだ」

*ストライピング
RAIDコントローラがデータをチャンクに分けるときのサイズ

—–ストライピングサイズ—–
印旛くんの予想通り、ストライピングサイズによってはせっかくのストライピ
ングの効果があまり得られません。どういうことかというと、

物理ディスク3本のRAID5をつくり、100Mのデータの書き込み要求があるとします。

この時、ストライピングサイズが、50Mだったとすると、
パリティとチャンク2つ(100M÷50M)、
計3つのチャンクが3本の物理ディスクに書き込まれます。

これと同じ書き込み処理を、物理ディスク6本のRAID5に行ったとしても結果は同
じになりますね。

「そういうことだったのか。ふー。
それにしても岸田さんがメルマガ読んでいるとは・・・」

「岸田さん、謎は全て解けました!」
「そう。じゃ、早く次の手順に進んで」
「はい・・・・・」

———————————————————————-
カタツムリは、ブロック塀を食べているらしい。
殻を強くするために。
昔は、カタツムリは石灰岩を食べて殻を強くするらしいが、
都会では石灰岩を見つけにくいからブロック塀をたべるようになったらしい。
カタツムリはどうやって気づいたんだろか?
好奇心旺盛なカタツムリがいたんだろうか?

さてはて?

くだらないことに頭を悩ませている今日この頃でした。