4.4 データベースの構成要素
物理的な構成要素の具体例としてOracleデータベースの以下の要素について紹介します。
- メモリ
- ファイル
- データファイルと表領域の関係
まず、Oracleサーバ全体のイメージを以下に示します。
4.4.1 メモリ
SGAはShared Global Areaの略で、共有メモリ領域を指します。
PGAはProgram Global Areaの略で、クライアントからの要求に対する処理を行うサーバプロセスの排他的メモリ領域を指します。
SGAの代表的な構成要素には、共有プール、DBバッファキャッシュ、REDOログバッファ、LARGEプール、JAVAプールなどがあります。
メモリ全体
メモリサイズは初期化パラメータで設定します。
最初に設定した値で実際にアプリケーションを実行してみて、統計情報の取得、パラメータ値の変更、再稼動という手順を繰り返すことによって最適な値を求めます。
このとき、値の変更は1コンポーネントごとに行います。
値が最適かどうかを判断するには、1つずつ検証しないと、どのパラメータの変更が有効だったかわからないからです。
Oracleが使用できるメモリ領域が大きいほど、データベース処理の性能は向上します。
実メモリからOSが使用するメモリ領域を除き、他のアプリケーションとの割合で決めます。
メモリ要件を決めるのは、パラメータファイル内のパラメータ値です。
Oracle9iから、データベース稼働中に動的にパタメータを変更することが可能になりました。
PGA
PGAサイズ
SQL作業領域(XXX_AREA_SIZEパラメータで指定できる領域)およびスタック領域をもとに算出します。
HASH_AREA_SIZE=nMB
BITMAP_MERGE_AREA_SIZE=nMB
PGAの自動調整機能を使用します(共有サーバの場合は不可)。
WORKAREA_SIZE_POLICY=AUTO(自動チューニングを有効化)
PGAの初期サイズ
PGAに割り当てる初期メモリサイズは、大まかに見積って以下のように考えることができます。
ただし、初期値は必ず実稼動後の統計情報を確認して補正する必要があります。
アプリケーションによるメモリ要件として、DSS系のアプリケーションの場合は、大量のデータを読み込んで大規模なソートなどを行う領域としてPGAが使用されます。
そこで、DSS系のアプリケーションを実行する場合には、共有メモリ領域は最小限にして、なるべく多くの領域をPGAに割り当てるようにします。
PGAの領域を割り当てるためのパラメータは、XXX_AREA_SIZEという命名規則をもちます。
統計情報などから適切に見積ることができる場合は、手動でこの値を設定します。
見積ることが難しい場合は、PGAの集計値の最大サイズだけ指定しておいて(PGA_AGGREGATE_TARGET)、PGAの最適化をOracleサーバに任せることもできます。
- OLTP系はOracleに割り当てるメモリサイズの20%くらいから
- DSS系はOracleに割り当てるメモリサイズの70%くらいから
SGA
SGAサイズ
SGAの最大サイズは以下の式に当てはめて求めます。
メモリ | パラメータ |
---|---|
共有プール | SHARED_POOL_SIZE |
DBバッファキャッシュ | DB_CACHE_SIZE |
REDOログバッファ | LOG_BUFFER |
ラージプール | LARGE_POOL_SIZE |
JAVAプール | JAVA_POOL_SIZE |
表4-2 SGAに割り当てるメモリと初期化パラメータ
SGAの初期サイズ
SGAに割り当てる初期メモリサイズはPGAの割合の反対になります。
OLTP系のトランザクションがメインで実行される環境の場合、共有メモリ領域SGAをなるべく大きく取得します。
ただし、初期値は必ず実稼動後の統計情報を確認して修正する必要があります。
- OLTP系はOracleに割り当てるメモリサイズの80%くらいから
- DSS系はOracleに割り当てるメモリサイズの30%くらいから
なお、SGAに割り当てるメモリサイズはグラニュルサイズの倍数にする必要があります。
グラニュルとは、連続する仮想メモリの単位で、以下の基準に基づき自動的に設定されます。
- SGA_MAX_SIZE(初期化パラメータ)<128MB →グラニュルサイズ:4MB
- SGA_MAX_SIZE>128MB →16MB
SHARED_POOL_SIZE、DB_CACHE_SIZEは、グラニユルサイズの倍数に指定します。
倍数にならない場合、切り上げて領域が取得されます。
Oracle9iから、データベースをシャットダウンしなくても、SGAサイズの一部を動的に変更できるようになりました。
これによって、日中はオンラインアプリケーションに有利なメモリサイズを指定しておき(SGAを大きく)、オンラインが収束したころにバッチに有利なメモリ割り当てを設定するように(PGAを大きく)、データベースを停止することなく、変更できるようになりました。
SGAサイズの変更
DBバッファキャッシュのサイズ変更は、初期パラメータでDB_CACHE_SIZEを指定したときのみ、動的変更が可能になります。
Oracle8iまでの初期化パラメータDB_BLOCK_BUFFERSを指定した場合は、動的に変更することはできません。
解説トレーナー