データベース設計
Oracleデータベースを設計する際に有効である知識を以下に示す。
1.DB_BLOCK_SIZEを決定する
Oracleはデータの管理をOracleブロックで管理します。SGA上のDBバッファもこの値を基に作成されます。この値はインスタンスを作成する前に決定しなければなりません。OLTP処理では2048、DSS処理では8192で定義するケースが多く見られます。
定義可能な値はOSに依存するため、OSのスペック表などで確認する必要があります。注意として、DB_BLOCK_SIZEを変更するにはデータベースを再構築するしかありません。
DB_BLOCK_SIZE
MAXEXTENTS
2KB (2048)
121
4KB (4096)
249
8KB (8192)
505
16KB (16384)
1032
32KB (32768)
2070
2.データベース名は、アルファベット大文字でORACLE_SIDと同一とする
データベースを作成するに当たって、まずデータベース名を決定する必要があります。DB_NAMEには8文字以内のテキスト文字列を設定しなければなりません。また、分かりやすさも考え、データベース名と環境変数ORACLE_SIDは同一にします。
3.制御ファイルは必ずミラー化し、最低でも3ファイル構成とする
制御ファイルはインスタンスを管理している重要なファイルです。制御ファイルが破損しバックアップが存在しない場合は、リカバリ作業大変複雑になるため必ず別ディスクにミラーリングを行います。
4.システム表領域のサイズは80MB以上とする
システム表領域は、データディクショナリやツール類の管理テーブルやストアドプロシジャやトリガー用の領域である。容量については、データディクショナリ用に20MB以上必要であり、ツール類の管理テーブルについてはツールの種類に、ストアドプロシジャ、トリガー用の必要容量についてはステップ数と数に依存するため物理設計段階では見積ることができないため大き目の設定をし、構築時に調整を行います。
5.オンラインREDOログは必ずミラー化し、最低でも2メンバー・3グループとする
Oracleでリカバリ機能の中核はオンラインREDOログです。オンラインREDOログを別ディスクにミラー化することにより、1グループのオンラインREDOログファイルが破損しても運用は続けられます。
この時、ディスク2に格納されているグループ1のオンラインREDOログが破損していますが、ミラーリングしているので運用に問題はありません。
6.maxdatafilesにはできるだけ大きな値を設定する
データベースは時が経つにつれ大きくなるものです。以後の拡張に備えてできるだけ大きな値を設定します。最大値はOSに依存します。インスタンスが使用するデータファイルのおよそ2倍を指定します。
7.ロールバックセグメント用の表領域を作成し、数量・サイズは実測から決定する
ロールバックセグメント表領域は、データベースエンジンにおいて、更新処理をロールバックする際に必要となる更新前の情報を保持するための領域であり、トランザクションのタイプと実際のデータに依存します。ロールバックセグメント用の表領域に関しては、オンライン処理用とバッチ処理用に分割します。詳細は「ロールバックセグメント設計」を参照してください。
8.表領域のSTORAGE句のパラメータは対象となるオブジェクトの最小値とする
各オブジェクトに対する表領域のSTORAGEは、その中に作成されるオブジェクトのSTORAGEが優先され、オブジェクト作成する際に指定をしないとデフォルトが採用されます。よって万が一指定し忘れた場合のために、対象となるオブジェクトの最小値を採用します。
9.表領域に対してMINIMUM EXTENTを指定する
表領域の断片化を制御するためのパラメータとして「MINIMUM EXTENT」があります。この値に対するOracleブロックの倍数でエクステントが増えるので、データを削除した後の小さなエクステントが発生する可能性が低くなります。しかし、その表領域でオブジェクト作成したときに、計画しているサイズにならない場合があるので注意が必要です。
SVRMGR>create tablespace USR_DATA
2>datafile '/opt/app/oracle/product/8.0.5/usrdata.dbf' size 50M
3>minimum extent 1M
4>default storage(initial 1M next 1M pctincrease 1);
上記の表領域に、エクステントサイズ500Kのパラメータでテーブルを作成した場合は、実際には1MBになります。
10.システム表領域以外のPCTINCREASEは1とする
表領域のPCTINCREASEにデフォルト値で1と設定する。これを0とした場合はバックグラウンドプロセスSMONの連続空きエクステントの結合処理が働きません。手動では次のSQLを実行し連続している空きエクステントを結合します。ただし、システム表領域はOracleカーネルで管理しているため、デフォルト値とします。
SVRMGR>alter tablespace XXX coalesce;
11.インデックス表領域を作成し、効率よくディスクI/Oを行う
効率よく検索処理を行う手法としてインデックス処理がありますが、実テーブルと同一のディスクにインデックスを配置することは、ハードディスクのシークタイムなどを考え好ましくありません。インデックスと実データは別ディスクに配置します。
12.マルチスレッドサーバ方式の特徴を理解する
マルチスレッドサーバと専用サーバの特徴を示します。
方式
評価
特徴
マルチスレッド
○
省資源で大量ユーザをサポート可能
○
シングルプロセッサ向き
○
OLTP処理向き
×
サーバでのハンドリングに限界があり、大量ユーザではボトルネックが発生する
×
大量バッチ等の処理には不向き
専用サーバ
○
大量バッチ等の処理向き
○
各ユーザの処理に対し、オーバヘッドが少なくて済む
×
プロセス数が増加しすぎる傾向がある
×
小規模のマシンでの性能が向上しない
×
OSに対する負荷が高い
以上より、マルチスレッドサーバは、多数のユーザをサポートするためのメモリ節約を行うために有効であることが理解できます。
13.ファイルシステムを決定する
パフォーマンスの向上の一つにRAWデバイスがあります。バッファを経由した書き込みを行わないためパフォーマンスは向上するのですが、運用管理が複雑になるため、シビアなパフォーマンス要求がない場合は、ファイルシステムを使用します。
14.大容量の表領域で2ギカを超える場合、ファイルを複数に分割する
UNIXでは2ギガを超える単一ファイルのバックアップで問題を起こすことがあるため、ファイル分割など行い2ギガを超えないようにします。
15.複数のファイルに分割することで、I/O分散作業を円滑に行える
データファイルが格納されているディスクにI/Oの問題が発生した場合に、ある1つのデータファイルを別デバイスに移動させI/O分散を円滑に行えます。また、マスタテーブル等の参照が主なメタ情報と、頻繁に更新が行われる時系列データで表領域を分割することも有効です。
16.表領域のデータファイルのサイズを統一する
I/Oの問題にてデータファイルの1ファイルを高負荷のディスクから、低負荷のディスクに移動させる場合の作業が円滑に行えます。
17.データベースファイルはスワップファイルと同一ディスクに作成してはならない
スワップファイルと同一ディスクにデータベースファイルを作成した場合、ディスクI/Oが集中しパフォーマンスが低下する。特にオンラインREDOログファイルの場合は深刻なパフォーマンス低下に陥ります。
18.オンラインREDOファイルをストライピングしてはならない
RAIDでストライピングを行っていても「SCSI障害」が発生すればデータは壊れます。その際にオンラインREDOログも壊れてしまっては何のためのリカバリ情報なのか分かりません。オンラインREDOログは独立系のディスクに配置し、シークオーバーヘッドをなくしI/Oレスポンスを上げることを考えます。
最終更新:2008年11月15日 22:17