Oracle でのディスク I/O 競合の最小化
ジオデータベースで設定可能なすべての要素のうち、格納領域はおそらく最も頻繁かつ広範にカスタマイズされるものです。同様に、Oracle データベースについても各 DBA は過去に実績をあげた研究と技術に基づいて、各自の方法論で論理格納構造と物理格納構造を編成したいと考えるでしょう。
使用するデータ、アプリケーション、既存の管理ポリシーなど具体的なニーズに合わせて、ジオデータベースでは柔軟に格納モデルを設計することができます。ArcSDE には厳密な格納要件はほとんどありません。GIS データ用に 1 つのデータ ディスクと 1 つの表領域しかないエントリ レベルのコンピュータを使用することも、何十というディスク アレイと数百の Oracle ファイルを持ち、それぞれが異なる目的のデータ格納をサポートするようなハイエンド サーバを使用することもできます。幸い、ArcSDE と Oracle のどちらも、どのリソースも有効活用してジオデータベースを稼働できるように適応させることができます。
アクセス頻度の高いファイルを異なるディスクに配置し、同じディスク上でアクセス頻度の高いファイルと低いファイルをグループ化することができれば、Oracle データベースのディスク I/O の競合を最小限に抑えることができます。これは、次の手順で行います。
- すべてのデータベース コンポーネントのサイズを見積もり、それらの相対的なアクセス比率を割り出します。
- 利用可能なディスク領域、ディスク ドライブのサイズと数に基づいて、コンポーネントを配置します。
ディスク ドライブの図を作成し、それらをコンポーネントでラベル付けすると、各コンポーネントの位置を追跡するのに役立ちます。データベースを作成する際には、この図を参考にしてください。
次に、Oracle に格納された ArcSDE ジオデータベースでのリソースの競合を避けるためのヒントを紹介します。ここで説明する表領域やセグメントなどの Oracle コンポーネントの詳細については、Oracle のドキュメントをご参照ください。
-
データベース設計を可能な限り単純にする
これは、設計を根本から単純にしなければならないということではありません。設計の複雑さが根拠なく決定されたものではなく、モデル化しているデータの複雑さに由来するものであるべきだということです。ジオデータベースの格納領域は、まず単一の表領域から開始して、表領域を追加作成する際にはその正当性を確認し、ドキュメント化します。各表領域の目的をドキュメント化すると、そのシステムを今後利用するユーザ(作成者も含めて)にとって便利であるだけでなく、管理を必要とする追加的な表領域それぞれの利点をより慎重に検討するようになります。
-
システム セグメントとユーザ セグメントを分ける
フィーチャクラスなどのユーザ セグメントを ArcSDE や Oracle のデータ ディクショナリなどのシステム セグメントから分離することで、領域割り当て制限の管理を容易にし、パフォーマンスの低下を招く断片化を回避します。さらに、これらのセグメントが別々に格納されていると、論理的には、表領域での操作を監視しやすくなります。
-
データをプロジェクトごとに分ける
プロジェクト、部署、その他の論理的なエンティティごとに専用の表領域を使用すると、監視と管理が容易になります。あるプロジェクトの表領域に影響を与える復元操作を実行しても、他のプロジェクトはオフラインになりません。ある部署のユーザに表領域の割り当て制限を無制限に設定しても、別の部署の表領域が使い果たされる危険性はありません。エンティティごとに専用の表領域が割り当てられていれば、I/O 操作とファイル サイズの増加をチームや個人に結び付けるのは簡単です。
-
大きなセグメントと小さなセグメントを分ける
エクステントのサイズは、セグメントのレベルだけでなく、表領域のレベルでも制限することができます。表領域のすべてのセグメントでエクステントのサイズを統一すると、空き領域の断片化が少なくなり、パフォーマンスの向上につながります。ただし、セグメントあたりのエクステントの数のバランスをとるためにセグメントをエクステントのサイズでグループ化する必要があるので、エクステントに必要以上に大きなサイズを指定すると領域が無駄になってしまいます。一般的に妥当なエクステントのサイズは、小さなテーブルでは 128 KB、大きなフィーチャクラスでは 1 MB、大きなラスタでは 128 MB ですが、これらの値は、実際の環境と調査結果に基づいて適切な値に調整する必要があります。
-
読み取り専用のデータと書き込み可能なデータを分ける
表領域に読み取り専用のデータだけを格納する場合は、表領域を明示的に読み取り専用モードに設定することができます。そうすれば、定期的にバックアップしなければならないデータの量が少なくなります。また、読み取り専用のデータ ファイルの格納には、RAID 5(Redundant Array of Independent Disks 5)アレイが適しています。これは、ストライプ化は読み取りアクセスに効果的であり、過剰な書き込み操作によってアレイのパフォーマンスが低下することがないためです。
-
ファイルの格納に複数のディスクまたはアレイを使用する
制御ファイル、オンライン REDO ログ、アーカイブ REDO ログといった重要な Oracle ファイルは、それらの保護を最大限に強化するために、Oracle ソフトウェアで多重化(ミラー化)する必要があります。
データベース サーバが単一ボリュームの格納アレイで構成されていたとしても、オペレーティング システム、ページ ファイル、ArcSDE と Oracle の実行可能ファイルを格納するために、通常はスタンドアロンの内部ディスクを利用することができます。このディスクを制御ファイルと REDO ログ ファイルのミラー化に使用します。注意:制御ファイルは、データベースに属しているファイルのリストなどの重要な情報を記録します。オンライン REDO ログ ファイルとアーカイブ REDO ログ ファイルは、リカバリ目的でデータベースへの変更を追跡記録します。これらのファイルの最新のコピーがなければ、データベースを完全に復元することは困難であるか、不可能です。
-
RAID ストレージを使用する場合は適切な RAID タイプを使用する
RAID はデータ格納管理サービスの役割を担います。一般的な RAID 方式はいくつかあり、番号つまり RAID レベルで示されます。RAID 0(ストライピング)では、同一ファイル システムの小部分をストライプと呼ばれる単位で複数の物理ディスクに格納します。ストライピングの利点は、パフォーマンスが向上することにあります。ファイル システムの内容を複数のデバイスに分割することで、RAID コントローラは複数のディスク間で同時に読み取りと書き込みを実行できるからです。RAID 0 の欠点は、アレイを構成するディスクが 1 つでもオフラインになると全アレイが使用できなくなるということです。
RAID 1(ミラーリング)では、1 つのディスクに書き込まれる内容すべてのコピーを 2 つ目のディスクにも重複して格納します。ミラーリングの利点はデータの保護です。データベースが一方のディスクを失ってもデータの逸失はなく、クラッシュの発生中にもサービス低下がありません。こうした理由から、RAID 1 は多くのジオデータベースで、特に高可用性が必要とされる場合に広く利用されています。ミラーリングの欠点はコストです。データが二重に格納されるので、同じ情報を格納するために、スタンドアロンやストライピングの場合と比べて 2 倍のディスクが必要になります。重複データを書き込む必要があるため、わずかながらライト ペナルティも伴います。RAID 10(RAID 1+0)は、RAID 1 と RAID 0 の利点を組み合わせたもので、RAID 10 アレイは、ミラーリングされたディスクのセット間でデータをストライピングします。RAID 0 が持つパフォーマンス上の利点と、RAID 1 が持つデータ保護の利点を得られます。RAID 10 と、RAID 10 方式に基づくベンダ固有の実装は、負荷の高いジオデータベースで最高の I/O パフォーマンスを発揮します。
RAID 10 は、ミラーリングしたデータを格納するための追加のハードウェアを必要とするためコストがかかります。最も使用頻度が高く、保護とパフォーマンスの両方を実現する必要があるファイルだけに RAID 10 を使用し、読み取り専用やアーカイブ、変更頻度の低いデータには他の RAID あるいはスタンドアロン構成を選択するという方法も考えられます。すべてのデータベースの格納に RAID 10 を使用する余裕があればそうすべきです。しかし、余裕がない場合には、利用できるハードウェアで実現できる最高の信頼とパフォーマンスとなるよう、各種 RAID とスタンドアロン ディスク構成の組み合わせを検討します。可能であれば、書き込みの多いファイルは RAID 1 か RAID 10 のデバイスに格納してください。書き込みの多いファイルには REDO ログを含め、データ ファイルには UNDO 表領域を含めます。必要に応じて、スタンドアロン ディスクで Oracle の多重化と総合的なバックアップ戦略を利用します。
RAID 5(回転パリティ付きストライピング)では、冗長性情報の格納用に、アレイ全体で 1 つの追加ディスクに相当するものだけが必要とされます。これを行うために、RAID 5 は複数のディスク間にデータをストライピングし、パリティ情報に当たる追加チャンクを 1 つだけ全体にストライピングします。アレイを構成する 1 つのディスクがオフラインになった場合、RAID プロセッサは残りのディスクとパリティ情報から欠損データを再構築できます。RAID 5 の利点は、ストライピングによって読み取りパフォーマンスが向上することと、完全ミラーリングではなくパリティ情報を利用することによって低コストで冗長性を実現できることです。ジオデータベースは読み取り負荷が高くなる傾向があるので、RAID 5 はジオデータベース アプリケーション、特に中程度の高可用性が求められる場合に最適です。
ただし、RAID 5 は完全に冗長な情報を格納するわけではないので、RAID 10 よりデータ逸失の可能性は高くなります。データ逸失が起きることは稀ですが、RAID 5 アレイを構成するディスクが 2 つ同時にオフラインになった場合には、残りの情報では欠損データの再構築に不十分なため、すべてのボリュームをオフラインにする必要があります。パフォーマンスが犠牲になりうるケースも 2 つあります。1 つは、データがアレイに書き込まれるときパリティ情報も計算して書き込む必要があること、もう 1 つは、1 つのドライブがオフラインになったとき、RAID プロセッサが欠損したディスクのためにデータを再構築する間、読み取りも書き込みもパフォーマンスが大幅に低下します。非常にアクティブなジオデータベースの場合、この 2 つの場合に利用可能なスループットが低くなり、サービスの許容レベルを下回ることもあります。
-
Oracle の自動ストレージ管理を利用する
Oracle10g では、自動ストレージ管理(ASM)機能が導入されました。ASM は基本的に、Oracle データベースでのサービス利用に特化して最適化された RAID システムです。ASM は、Oracle インスタンスを利用して、ディスク グループとして管理されている RAW パーティションのグループにデータの I/O リクエストを仲介します。ディスク グループでは、ストライピングとミラーリングの他に、通常の 2 つではなく 3 つのコピーを格納する高度冗長性と呼ばれる特殊ミラーリングを利用できます。
-
読み取り専用データに小さな PCTFREE 値を使用する
Oracle では、テーブルに新しいデータを挿入する際、各データ ブロックで一定サイズの空き領域を確保することができます。データ ブロックの空き領域の上限に達すると、Oracle はそのブロックにそれ以上データを挿入しなくなります。この空き領域は、そのブロックに格納されている既存の行の更新にのみ使用することができます。更新操作専用の領域を確保すれば、行が元のブロックで空き領域を使い果たし、新しいブロックへの移行が必要になる、ということもありません。行の移行は、更新時間においても、それ以降のクエリなどの操作で行にアクセスする際にも、負荷の高い操作です。
多くのジオデータベースは、テーブルが静的であるか(特にラスタの場合はたいてい静的です)、マルチバージョン対応のワークフローで編集されているため、それほど頻繁に更新されません。マルチバージョン対応のワークフローでは、削除操作と挿入操作が組み合わされて実際の更新に置き換えられます。
ジオデータベースのデータの格納に使用される各ブロックの領域を最大にするために、ArcSDE は空き領域を確保しないように事前設定されています。これは、DBTUNE の格納文字列に PCTFREE 0 句として設定されています。カスタム アプリケーションで SQL 更新のための空き領域を確保したい場合は、デフォルトの DBTUNE の構成で PCTFREE の値を変更します。DBTUNE 設定の詳細については、「DBTUNE テーブルとは」、「DBTUNE コンフィグレーション キーワードおよびパラメータとは」、および「Oracle の DBTUNE コンフィグレーション パラメータ」をご参照ください。