システムグローバル領域

システムグローバル領域 (: System Global Area, SGA) とは、データベースであるOracle Databaseに割り当てられる専用のメモリ領域である。その他に、プログラムグローバル領域 (: Program Global Area, PGA) についても説明する。

概要 編集

ユーザの入力を処理する「サーバプロセス」のすべてが共有するメモリ領域である。SQLの処理で必要なデータを記録して各ユーザが共有する。Oracle Databaseのインスタンスは、システムグローバル領域とバックグラウンドプロセスで構成される。

システムグローバル領域のサイズが大きいほど、システムグローバル領域から利用できるデータが増加する。つまり、ハードディスクから読み込まなくても済むようになるので、Oracle Databaseの性能がよくなる。

メモリの構成 編集

システムグローバル領域は最低でも3つのメモリ(バッファ)で構成される、Unix/Linux上から見ると共有メモリ上に配置される。

  • データベースバッファキャッシュ
  • REDOログバッファ
  • 共有プール

さらに、オプションとして3つのメモリ領域も含める。

  • ラージプール
  • Javaプール
  • Streamsプール

データベースバッファキャッシュと共有プール、ラージプール、Javaプール、Streamsプールは、Oracle9i以降インスタンスを停止しなくてもサイズを変更できる。サイズは「初期化パラメータファイル[1]」もしくはSPFILEに指定する

データベースバッファキャッシュ 編集

データを再利用するために、頻繁にアクセスされるデータや新しいデータを記録するキャッシュである。古いデータは「データファイル[1]」に書き込む。

Oracle Databaseでは、このキャッシュでデータの処理を完了させてから、ハードディスクのデータファイルに書き込む。書き込むデータの順番はLRU(Least Recently Used)というアルゴリズムで決定する。チェックポイントが発行されるとバッファキャッシュの使用済みバッファの内容はデータファイルに書き込まれる。

バッファ 編集

  • 使用済みバッファ
処理が完了したデータがあるバッファ。このバッファからデータファイルに書き込む。
  • 使用中バッファ
現在アクセスされているバッファ。
  • 使用可能バッファ
空のバッファ。

リスト 編集

  • 書き込みリスト
使用済みバッファを記録する。
  • LRUリスト
書き込みリストに記録していない使用済みバッファや使用中バッファ、使用可能バッファを記録する。

REDOログバッファ 編集

サーバプロセスがOracle Databaseを更新した履歴を記録するバッファである。時系列で記録する。そのため、別のトランザクションの更新履歴が挿入されることがある。

「LGWR[2]」は、コミットが実行されるとバッファのデータを「REDOログファイル[1]」に書き込む。そして、新しい更新履歴が古いREDOログバッファに書き込まれる。

共有プール 編集

共有プールには2つのキャッシュがある。

  • ライブラリキャッシュ
  • データディクショナリキャッシュ(行キャッシュ)

ライブラリキャッシュ 編集

よく利用するSQL文の情報をライブラリキャッシュに記録しておく。こうすることで、同じSQL文を再び実行するときにサーバプロセスがSQL文を解析しなくてすむ。

格納するSQL文の情報 編集

  • SQL本文
ユーザが入力したSQLの文章。
  • 解析済みコード
コンピュータでも分かるようにSQL文を変換したソースコード
  • 実行計画
SQL文を実行するステップを定義したもの。

データディクショナリキャッシュ 編集

Oracle Databaseについての情報である「データディクショナリ」のデータを記録している。の定義やユーザ名、パスワード、アクセス権限などを記録する。サーバプロセスはこのキャッシュからSQL文で指定したアクセス権限を検索する。この情報は必要に応じてSYSTEM表領域のデータファイルから読み込む。

オプションのメモリ領域 編集

ラージプール 編集

Oracle Databaseのバックアップとリストア(障害の回復)、入出力のサーバプロセスと共有サーバのセッション・メモリ用。

Javaプール 編集

Java仮想マシン (JVM)のJavaコードとデータに利用する。

Streamsプール 編集

Oracle Streamsに利用される。

プログラムグローバル領域(PGA) 編集

1つのプロセスのデータと制御情報が記録されるメモリ領域である。プログラムグローバル領域はサーバプロセスを生成した時に割り当てられる。プロセスが終了したら割り当てが解除される。

記録する内容 編集

  • スタック領域
セッション変数(ログイン情報)を記録する。
  • セッション情報
セッションへのユーザ権限についての情報を記録する。
  • ソート領域
データのソート処理に利用する。
  • カーソルの状態
セッションで利用しているカーソル処理の状態を記録する。

脚注 編集

関連項目 編集