COL: CSS:



システム・グローバル領域 (SGA)

インスタンスの SGA 領域

Oracle インスタンスは SGA とバックグラウンド・プロセスに大別される。SGA は以下のメモリ・バッファから構成される。

データベース・バッファ・キャッシュ
データファイルから読み込んだデータ・ブロックのコピーが保持される領域で,インスタンスに同時接続されたユーザー・プロセスは全て,データベース・バッファ・キャッシュへのアクセスを共有することで,アクセス速度の向上や競合の抑止に役立てている。
REDO ログ・バッファ
データベースに加えられた変更の情報を保持する領域で,この情報は REDO エントリに格納される。REDO エントリには,INSERT / UPDATE / DELETE / CREATE / ALTER / DROP の各操作によってデータベースに加えられた変更の再構築 / 再実行に必要な情報が含まれ,データベースのリカバリ時に使用される。
共有プール
ライブラリ・キャッシュ (共有 SQL 領域 / プライベート SQL 領域 (共有サーバー構成の場合) / PL/SQL プロシージャ / パッケージ等) などを保持する領域。
ラージプール
Oracle のバックアップ / リストア操作,I/O サーバープロセス,共有サーバ構成時のセッション・メモリーを構成する領域。
Java プール
サーバー・メモリー内で Java 仮想マシン (JVM) に含まれるセッション固有の Java コードとデータ全てに使用される領域。
ストリーム・プール
Oracle Stream で利用される領域。

初期化パラメータファイル内の SGA_MAX_SIZE 初期化パラメータ

SGA 全体のサイズは,初期化パラメータファイルの SGA_MAX_SIZE 初期化パラメータに指定する。初期化パラメータファイルはインスタンス起動時に読み込まれるため,値を変更した場合は,インスタンスの起動からやり直せば変更値が反映される。

インスタンス初期化時に,初期化パラメータ・ファイルまたはサーバー・パラメータ・ファイル (SPFILE) の SGA_MAX_SIZE の値が,すべてのコンポーネントに対してパラメータ・ファイルで明示的またはデフォルトで割り当てたメモリーの合計より少ない場合,データベースはその SGA_MAX_SIZE の設定を無視する。

SGA のサイズは,下記のような初期化パラメータなどによって定まる。

  • DB_CACHE_SIZE: 標準ブロックのキャッシュ・サイズ
  • LOG_BUFFER: REDOログ・バッファに割り当てられるバイト数
  • SHARED_POOL_SIZE: 共有SQL文と共有PL/SQL文に割り当てられる領域のサイズ
  • LARGE_POOL_SIZE: ラージ・プールのサイズ。デフォルトは 0 (ゼロ)
  • JAVA_POOL_SIZE: Java プールのサイズ

自動共有メモリー管理

Oracle Database のバージョン 10g から,SGA コンポーネント・サイズを自動調節する “自動共有メモリー管理” 機能が追加された。この機能によりデータベース管理者 (DBA) は,SGA サイズを決定する初期化パラメータ群を手動で設定する必要がなくなり,代わって SGA_TARGET 初期化パラメータに,インスタンスで使用可能な SGA メモリーの合計容量のみ指定するだけで利用可能になった。Oracle Database はメモリー使用率が最も効率的になるように,そのメモリーを各種サブコンポーネントに自動的に分配する

SGA_TARGET 初期化パラメータを設定すると,Oracle Database 10g は最も一般的に構成される次のコンポーネントのサイズを自動的に変更する。

  • 共有プール
  • Java プール
  • ラージ・プール
  • バッファ・キャッシュ
  • ストリーム・プール

自動 SGA 管理によってワークロードのパフォーマンスが向上するため,追加リソースや手動によるチューニングは不要になる。これにより,例えば共有プールのサイズが不適切なために,ハード解析の頻度が増してパフォーマンスが低下するのを防ぐことができる。

デフォルトでは,上記自動チューニング対象のコンポーネント・パラメータは 0 (ゼロ) に設定されている。メモリーが必要なコンポーネントに対し,内部的な自動チューニング・メカニズムの方法によって別のコンポーネントからメモリーを転送するように自動要求されるようになる。

パフォーマンスは Oracle Database インスタンスで監視される。インスタンスは,内部ビューと統計を使用して,コンポーネントにメモリーを適切に分配する方法を決定する。ワークロードの変化に応じて,最適なパフォーマンスとなるようにメモリーが再分配される。メモリーの最適な分配を計算するために,データベースでは長期と短期の傾向を考慮するアルゴリズムが使用される。