4.4 データベースの構成要素

4.4 データベースの構成要素

物理的な構成要素の具体例としてOracleデータベースの以下の要素について紹介します。

  • メモリ
  • ファイル
  • データファイルと表領域の関係

まず、Oracleサーバ全体のイメージを以下に示します。

4.4.1 メモリ

メモリ領域は、SGAとPGAの領域に大別できます。
SGAはShared Global Areaの略で、共有メモリ領域を指します。
PGAはProgram Global Areaの略で、クライアントからの要求に対する処理を行うサーバプロセスの排他的メモリ領域を指します。
SGAの代表的な構成要素には、共有プール、DBバッファキャッシュ、REDOログバッファ、LARGEプール、JAVAプールなどがあります。

メモリ全体

メモリサイズは初期化パラメータで設定します。
最初に設定した値で実際にアプリケーションを実行してみて、統計情報の取得、パラメータ値の変更、再稼動という手順を繰り返すことによって最適な値を求めます。
このとき、値の変更は1コンポーネントごとに行います。
値が最適かどうかを判断するには、1つずつ検証しないと、どのパラメータの変更が有効だったかわからないからです。

Oracleが使用できるメモリ領域が大きいほど、データベース処理の性能は向上します。
実メモリからOSが使用するメモリ領域を除き、他のアプリケーションとの割合で決めます。

メモリ要件を決めるのは、パラメータファイル内のパラメータ値です。
Oracle9iから、データベース稼働中に動的にパタメータを変更することが可能になりました。

PGA

PGAサイズ

SQL作業領域(XXX_AREA_SIZEパラメータで指定できる領域)およびスタック領域をもとに算出します。

SORT_AREA_SIZE=nMB
HASH_AREA_SIZE=nMB
BITMAP_MERGE_AREA_SIZE=nMB

PGAの自動調整機能を使用します(共有サーバの場合は不可)。

PGA_AGGREGATE_JARGET=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の最大サイズは以下の式に当てはめて求めます。

SGA_MAX_SIZE=Oracleで使用する総メモリ量-PGAメモリ量
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を指定した場合は、動的に変更することはできません。

< 前へ | 4.4 データベースの構成要素 | 次へ >

解説トレーナー

Oracle / 上流工程 担当 中村 才千代

データベース設計、システム構築の上流~下流工程全般のインストラクターです。SE時代の経験を生かし「業務を知るエンジニアこそDB設計に関わるべき」「DB設計に携わるエンジニアは業務を知る人に知恵を貸してもらう」ことを伝えたいと思っています。

■認定・受賞

2000年 Oracle University「Best Instructor of the Year」受賞
2002年 Oracle University「Best Instructor of the Year」受賞

Page Top