サポート日記Q&A その2

投稿日: 2003年12月15日

今年最後のメルマガです。年末恒例のQAシリーズ第2回目です。
今回は、議論する題材として面白いものがありましたので数回に分けてお送
りいたします。
最後に、投稿者へのプレゼントを用意していますので最後まで読んでください。

>   毎週「おら!オラ!Oracle -どっぷり検証生活-」を拝見し、
>   良い勉強をさせて頂いております。
>
>   さて、今回の質問内容ですが、I/Oのチューニングに関する事です。
>   当然の事ながらI/Oを分散し、ディスク競合を低減させた方が良い事
>   は理解していますが、コストの関係上、全ての競合をさける分散を実現
>   する事は困難です。
>
>   そこで、各々のデータに適切なストライプ化方法(しない事も含めて)、
>   及び競合をさけるべきデータの優先順位をご教授頂きたく、よろしくお
>   願い致します。(一般的な見解で結構です)
>   なお、当方が考えているデータの種類を以下に記します。
>     ・事実表
>     ・参照表
>     ・事実表のインデックス
>     ・参照表のインデックス
>     ・REDOログ
>     ・一時表
>     ・ロールバックセグメント
>     ・システム表
>     ・制御ファイル
>     ・OSのシステム領域(仮想メモリ等もある事とする)
>
>   また、アプリケーションのタイプによっても変化すると思われますので、
>   OLTP、DSS、多目的の三種類でお考え頂けると幸いです。
>
>   Q&Aを送らせて頂く事が初めてであり、色々と勝手な事を書いており
>   ますが、お答え頂ける範囲で結構ですので、ご検討下さいます様、よろ
>   しくお願い致します。

このご質問に対する答えは、以下の前提条件を踏まえて皆様から募りたいと
思います。

<前提+あれこれ>

Oracle自身による自動ストライピング機能が10gからできるようになりますね。
これには、2つの理由があると思います。

(1) RAIDディスクでストライピングするとコストがかかる
(2) 複数の物理ディスクで構成されたロジカルボリューム単位でストライピ
    ングできる

RAIDディスクには、ストライピング以外にもミラーリングなどの「データ保護」
という重要な側面があります。

1.RAIDディスクの種類
ひとことで「ストライピング」といってもRAID0か?RAID5か?では内容が異
なります。また「何本のディスク」でストライピングするか?も重要なポイ
ントです。(何故RAID3とかを語らないのは解りますよね?)

例えば「RAID5を3本でストライピングを行っています」というのであれば、
ディスクI/Oのチューニングという点では始めから話になりません!と答える
のが正しいでしょう。

「エッ-!!!そんなわけないだろ...(`★^)!」

ハードメーカは複雑系のRAID5を売り込みます。
チューニングの現場では、お客様に負の財産を買わせる訳に行きませんから、
以下のようなバトル(?)が繰り返されます。

[★反論]RAID5は保護とストライピングによるI/O分散という2つの側面を兼
ね備えているんだよ!RAID1のミラーリングだけじゃ、ストライピングはでき
ないし、RAID0+1(1+0)にしたらディスクを沢山入れなきゃなんないじゃない!
[☆筆者]でも3本のRAID5だと、実質2本程度のストラピングで書き込みオー
バヘッドまで加味すると結局ストライピング効果はでません。1本追加して4
本の物理ディスクにしてRAID1にした方がトータルではパフォーマンスも出ま
すし、データ保護もできます。

  ・4本をミラーリングして2本のロジカルボリュームとして管理すれば:
(1)コントローラも2つに分けられるかもしれません。
(2)書き込み性能が遅いRAID5の欠点を回避出来ます。
(3)故障時のディスク切り替え時に大幅にレスポンスがダウンするRAID5の
      欠点を回避出来ます。

[★]RAID5の筐体自体にGB単位でキャッシュメモリーを実装できるんですよ。
      そうすれば、書き込み性能は問題ないでしょ!?
[☆]実質2本のストライプしかできないのに、そんなところにお金を掛ける
      のはもったいないでしょ!アンバランスです。
      ディスクを1本増やすだけで、故障時も含めて安定したI/O性能が得ら
      れますよ。

[★]書き込みが少ないシステムであればRAID5でもいいじゃん!
[☆]それは少し合意できます。でも「どっちでもいいじゃん。書き込みが
      少なくてデータ量も少ないなら...」です。
      そもそもそれほど予算を掛けれないから3本ぐらいでストライピングま
      でさせようと考えたわけですから、安い方をコントローラを分けて使
      わせてくださいよ!!
      ...「RAID5はこれからどんどん使われなくなり ますよ!(筆者独り言)」
[★・゜゜・。☆。・゜゜・★・゜゜・。☆。・゜゜・★・゜゜・。☆。・゜゜・★]

2.ストライピング
今回の質問のストライピングは5本以上でRAID0によるものを想定して考えます。
RAID0+1(1+0)なら10本でのミラーリングです。

3.オンラインREDOログ
これがなくなったら、いくらアーカイブ運用をきちんと行っていても「おし
まい」です。パフォーマンスとは別枠に一番最初に考えるべき課題です。
また、データファイルが行っているランダムI/Oとは異なります:

(1)シーケンシャルライトのみ
(2)リカバリ時にはシーケンシャルリードも行われる
(3)LGWRが書き込みを一手に引き受けている

4.お金がないから、、、。
お金があれば大量の物理ディスクでRAID0+1等にして、全部放り込んでしまっ
て速いでしょ!って言って良いのでしょうか?
大事なREDOログへの配慮が抜けていたり、Oracle自身が持っているREDOやコン
トロールファイルに対するミラーリングをマイナスに機能させてしまいますよね?
・大事な部分にはお金を掛けます。
・無駄なお金は使いません。

5.その他の前提条件
・大事なデータベース
・パフォーマンスとデータ保護を考慮したシステムであること
・同時ユーザ数は少なくありません
・OLTP系の場合はショートトランザクションでの更新が常にあります
(同時更新数は最低5以上と考えてください)
・DSS系の場合は夜間に大量のデータロードが行われる場合があります
・CPU数は2個以上
・物理メモリは1GB以上

さぁ、皆さんで今回の質問の答え(意見)を考えてください。
皆さんの投稿の中から、採用させていただいた方々に対して(匿名OK)抽選で
当メルマガの書籍をプレゼントいたします。

以上、最近はずっとインド。 Au-DBitマスター試験官