初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。
前回はOracleが使用するメモリ領域の主な片割れ、SGAにつきまして説明させて頂きました。
今回、もう一方のPGAについて述べさせて頂きます。
以下、今回の内容となります。
・PGAとは?
・PGAの構成要素は?
・自動管理について
PGAとは?
PGA (Program Global Area)は、サーバ・プロセスが起動された際に確保されるメモリ領域です。
サーバ・プロセスは、ユーザが投げる要求を処理し、結果をユーザに戻す機能を有します。
確保されたPGAは非共有であり、対応するサーバプロセス以外からのアクセスはできません。
PGAは対応するサーバ・プロセスが終了した際に解放されます。
PGAの構成要素は?
PGAは、一般的に以下の図に示すような領域から構成されています。
・セッション情報
セッションに対するユーザーの権限に関する情報です。
・カーソル状態
現在のセッションで使用している、様々なカーソルの処理状態に関する情報です。
・スタック空間
セッション変数(ログイン情報)を格納しています。
・ソート領域
複雑な問い合わせを行った際に使用される領域です。
以下、それぞれについて領域が割り当てられ、処理が実施されます。
>>ソートベースの演算子(ORDER BY、GROUP BY等)
パラメータSORT_AREA_SIZEでサイズ指定します。
ソートに使用される領域であり、最終行を返したタイミングで解放されます。
>>ハッシュ結合
パラメータHASH_AREA_SIZEでサイズ指定します。
等価である値を結合に用いる際に使用される領域です。
>>ビットマップ・マージ
パラメータBITMAP_MERGE_AREA_SIZEでサイズ指定します。
ビットマップ索引を含む問い合わせが実施された際、
索引をスキャンした結果取り出されるビットマップをマージするために使用されます。
>>ビットマップ作成
パラメータCREATE_BITMAP_AREA_SIZEでサイズ指定します。
ビットマップ作成時に割り当てる領域です。
自動管理について
リファレンスマニュアルに記載されている通り、○○_AREA_SIZEの各種パラメータは
共有サーバ構成ではない状態では推奨されておりません。
<マニュアルより抜粋>
----------------------------------------------------------------
インスタンスが共有サーバーのオプションで構成されていないかぎり、
SORT_AREA_SIZE パラメータを使用することはお薦めしません。
かわりに、PGA_AGGREGATE_TARGET を設定して、SQL 作業領域の自動サイズ指定
を使用可能にすることをお薦めします。
SORT_AREA_SIZE は、下位互換性を保つために残されます。
----------------------------------------------------------------
※共有サーバについては、別の回で扱われる予定です
PGAの自動メモリの割り当てをするには、パラメータPGA_AGGREGATE_TARGETを設定します。
PGA_AGGREGATE_TARGETを0以外の値に設定した場合、一部のメモリ領域のサイズを必要に応じてOracleが自動的に変更します。
11gからは更にこの自動管理機能が強化されてMEMORY_TARGETというパラメータが登場していますが、こちらについては以前の回をご覧ください。
まとめ
・PGAとは、各サーバ・プロセスが独自に保有するメモリ領域です。
・PGAは主にセッション情報/カーソル状態/スタック空間/ソート領域から構成されます。
・PGA_AGGREGATE_TARGETを0以外の値に設定することで、PGAの自動管理が有効になります。
・更に11gからはSGA、PGAの自動管理パラメータとしてMEMORY_TARGETがあります。
最後に
以上、Oracleが使用するメモリ領域のうちPGAについて説明させて頂きました。
なお、今回をもちまして私の担当箇所は終了となります。
長々とお付き合い頂きまして、誠に恐縮でございます。
マニュアルや関連情報を漁る度に、改めて自分の不勉強を痛感しておりましたが、
逆に、だからOracleはやめられないなどと浮かぶ始末でもありました。
今後、またこういった企画があれば、参加させて頂くこともあると思われますが、
その際は、再度宜しくお願い致します。
では、失礼致します。