システムグローバル領域

システムグローバル領域 () とは、データベースであるOracle Databaseに割り当てられる専用のメモリ領域である。その他に、プログラムグローバル領域 () についても説明する。
概要.
ユーザの入力を処理する「サーバプロセス」のすべてが共有するメモリ領域である。SQLの処理で必要なデータを記録して各ユーザが共有する。Oracle Databaseのインスタンスは、システムグローバル領域とバックグラウンドプロセスで構成される。
システムグローバル領域のサイズが大きいほど、システムグローバル領域から利用できるデータが増加する。つまり、ハードディスクから読み込まなくても済むようになるので、Oracle Databaseの性能がよくなる。
メモリの構成.
システムグローバル領域は最低でも3つのメモリ(バッファ)で構成される、Unix/Linux上から見ると共有メモリ上に配置される。
さらに、オプションとして3つのメモリ領域も含める。
データベースバッファキャッシュと共有プール、ラージプール、Javaプール、Streamsプールは、Oracle9i以降インスタンスを停止しなくてもサイズを変更できる。サイズは「初期化パラメータファイル」もしくはSPFILEに指定する
データベースバッファキャッシュ.
データを再利用するために、頻繁にアクセスされるデータや新しいデータを記録するキャッシュである。古いデータは「データファイル」に書き込む。
Oracle Databaseでは、このキャッシュでデータの処理を完了させてから、ハードディスクのデータファイルに書き込む。書き込むデータの順番はLRU(Least Recently Used)というアルゴリズムで決定する。チェックポイントが発行されるとバッファキャッシュの使用済みバッファの内容はデータファイルに書き込まれる。
REDOログバッファ.
サーバプロセスがOracle Databaseを更新した履歴を記録するバッファである。時系列で記録する。そのため、別のトランザクションの更新履歴が挿入されることがある。
「LGWR」は、コミットが実行されるとバッファのデータを「REDOログファイル」に書き込む。そして、新しい更新履歴が古いREDOログバッファに書き込まれる。
共有プール.
共有プールには2つのキャッシュがある。
ライブラリキャッシュ.
よく利用するSQL文の情報をライブラリキャッシュに記録しておく。こうすることで、同じSQL文を再び実行するときにサーバプロセスがSQL文を解析しなくてすむ。
データディクショナリキャッシュ.
Oracle Databaseについての情報である「データディクショナリ」のデータを記録している。表と列の定義やユーザ名、パスワード、アクセス権限などを記録する。サーバプロセスはこのキャッシュからSQL文で指定したアクセス権限を検索する。この情報は必要に応じてSYSTEM表領域のデータファイルから読み込む。
オプションのメモリ領域.
ラージプール.
Oracle Databaseのバックアップとリストア(障害の回復)、入出力のサーバプロセスと共有サーバのセッション・メモリ用。
Javaプール.
Java仮想マシン (JVM)のJavaコードとデータに利用する。
Streamsプール.
Oracle Streamsに利用される。
プログラムグローバル領域(PGA).
1つのプロセスのデータと制御情報が記録されるメモリ領域である。プログラムグローバル領域はサーバプロセスを生成した時に割り当てられる。プロセスが終了したら割り当てが解除される。