|
|
 |
 |
 |
第7章 ストライプ化とは |
|
|
 |
本章ではOracleデータベースから見たRAID(Redundant Arrays of Inexpensive Disks)の考慮ポイントについてご説明します。
OracleデータベースのパフォーマンスはディスクI/Oに大きく影響を受けます。ディスクI/OはOracleの処理の中で最も時間がかかる処理で、ディスクI/Oが遅いとOracleデータベース全体のパフォーマンスはあがりません。 「第2章 SQLチューニングの基礎とは」で説明しましたが、ディスクI/Oを効率的に行うには、余計なブロックに対するアクセスを減少させることが何より重要であり、ディスクI/Oの負荷を減少させるために最初にすべきことはSQLのチューニングとなります。
本章ではディスクI/Oを効率的に行うためのディスク側の方策として、I/Oが1つのディスクに集中しないように複数のディスクやディスクコントローラにI/Oを分散させるRAIDについて簡単にご説明します。
|
|
RAID(Redundant Arrays of Inexpensive Disks)
|
RAIDとは、複数のハードディスクを論理的に組合わせることによってI/Oの速度を向上させたり、安全性を高める技術です。ハードディスク(ディスクコントローラ)に制御を任せるハードウェアRAIDと、OSが制御するソフトウェアRAIDが存在しますが、ホストのリソース負荷が低いハードウェアRAIDを使用することが推奨されます。
Oracleでよく使用されるRAIDレベルにはRAID0、RAID1、RAID0+1(またはRAID1+0)、RAID5があります。
以下にRAID0、RAID1、RAID0+1、RAID5を説明します。
| (1) |
RAID0 |
|
RAID0はストライピングという、複数のディスクにデータを分割することによって、I/Oを分散させる方法です。
RAID0は読書きのパフォーマンスに優れます。
しかし、ディスクの1つにでも障害が発生するとすべてのデータにアクセスできなくなるため、RAID0のみの運用は現実的ではありませんが、Oracleデータベースの一時表領域は障害が発生してもリカバリの対象とならないため、RAID0に配置しても問題ありません。
RAID0に配置できるOracleデータベース関連のファイル
■ ローカル管理の一時表領域
障害が発生してもリカバリの対象とならないため。
|
上記で説明したRAID0の説明図が図1になります。
図1:RAIDOの仕組み
|
 |
|
|
|
| (2) |
RAID1 |
|
RAID1はミラーリングです。
同じ内容を複数のディスクに書込むことによって、データを冗長化し、一方のディスクに障害が発生しても他方で処理を継続できます。よってディスクは通常の2倍必要となります。
RAID1は、シーケンシャルな書込みが発生するオンラインREDOログ・ファイル、アーカイブREDOログ・ファイルや制御ファイル、に最適です。これらのファイルは、Oracleの多重化機能とRAIDによるミラーリング両方を行うことをお薦めします。
|
|
上記で説明したRAID1の説明図が図2になります。
図2:RAID1の仕組み
|

|
|
| (3) |
RAID0+1 |
|
RAID0+1は「ストライプ化してから、ミラー化する」手法です。
RAID0とRAID1のメリットを持合わせ、読書きのパフォーマンス、安全性に優れており、主に書込み主体のアプリケーションで広く使用されています。
RAID0+1はOLTPシステムなどの読書きパフォーマンスが必要なデータ・ファイルに理想的ですが、、コストがかかるのが最大の欠点となります。
また、RAID0+1が「ストライプ化してから、ミラー化する」のに対し、」RAID1+0は「ミラー化してからストライプ化する」手法です。
|
上記で説明したRAID0+1の説明図が図3になります。
図3:RAID0+1の仕組み
|
|
 |
|
| (4) |
RAID5 |
|
現在最も普及しているRAID実装です。
最低3台のディスクを必要とし、ストライプ化を行い、パリティによってデータの冗長・保護機能を提供します。、RAID0+1よりもコストを節約できます。
パリティはミラーリングをサポートしていない一部のRAIDレベルで実装されています。RAID5ではデータの書込み時にパリティ計算が行われ、その結果がディスクに書込まれます。これにより、一部のディスクが故障しても、それ以外のディスクのデータとパリティ情報から、元の完全なデータを生成して回復できます。
ただし、回復可能なのは1台のディスクが故障したときまでであり、同時に2台以上が壊れると回復は不可能になりますのでご注意ください。
また、RAID5の最大の欠点は、パリティ処理による書込み時のオーバーヘッドです。
以下のシステムには適しませんのでご注意ください。
■ 書込み主体のアプリケーション
■ オンラインREDOログ・ファイル(書き込み中心のため)
■ 読込み専用アプリケーション
|
|
|
上記で説明したRAID5の説明図が図4になります。
図4:RAID5の仕組み
|
 |
今回ご紹介したRAID0、RAID1、RAID0+1(またはRAID1+0)、RAID5以外にも、RAID5のパリティデータを2重化するRAID6など各ストレージベンダーが提供する独自の方式が存在します。
|
ストライプ・サイズ |
RAIDストライピングにより、1つのファイルの連続するストライプが別々のディスクに配置されます。そのため、RAIDのストライプ機能を効率的に使用するには、ストライプ・サイズを適切に設定することが重要です。
ストライプ・サイズの決定において以下のことを考慮してください。
| ■ |
同時実行性が低く、全表スキャン中心のシステム
単一I/Oリクエスト(全表スキャンではマルチブロックI/O) が同じディスクに2回アクセスしないようにします。
例えばディスクが4本あり、ストライプ・サイズを32Kで設定しているとします。
このとき、単一I/Oリクエストが1Mだとすると、各ディスクに8回I/Oを実行する必要があり(同ディスクに複数の物理I/Oリクエストが発生する)、負荷が高くなるため、パフォーマンスが低下してしまいます。(図5)
このような状態を回避するために、平均I/Oサイズはストライプ・サイズとディスク数の積より小さいサイズにします。
・ストライプ・サイズ × ディスク数 > 平均I/Oサイズ
注意点:ボリュームに構成された全ディスクがI/Oに関わるようにします。
|
| ■ |
同時実行性が高く、索引スキャン中心のシステム
単一I/Oリクエスト(索引スキャンではシングル・ブロックI/O) が複数の物理I/Oコールに分解されないようにします。
ストライプ・サイズが小さすぎると、システムで実行される物理I/Oリクエスト数が増え、I/O応答時間が下がります。
|
|
| NOTE |
: |
ストライプ・サイズはOracleデータ・ブロック・サイズの倍数にしてください。また、Oracleデータベースにおける適切なストライプ・サイズは通常、256K~1Mです。
|
|
|
例として1MのI/O要求の場合に、ストライプ・サイズが32Kと256Kでのディスク・アクセスの違いを図で説明します。
ストライプ・サイズが32Kの場合の図が図5になります。
図5:ストライプ・サイズ32Kの場合 |
 |
上記の図のように、ストライプ・サイズが小さいと、単一I/O要求で同じディスクに複数回アクセスが発生するため、パフォーマンスが低下してしまします。
|
ストライプ・サイズが256Kの場合の図が図6になります。
図6:ストライプ・サイズ256Kの場合 |
 |
| 上記の図のように、ストライプ・サイズが大きいと同じディスクに複数回アクセスが発生しないため、負荷を低減できパフォーマンスを向上することができます。 |
RAID方式以外にも各ストレージベンダーごとにディスクキャッシュなどのI/Oを高速化する様々な仕組みが存在していますので、ストレージを採用される際に確認することをお勧めします。
次章では、手動によるI/Oを分散についてご紹介します。 |
|
|
|
|
|
 |
第8章 手動によりI/Oを分散してみよう |
|