【ORACLE】SGAとPGA


ここでは、ORACLEデータベースのメモリ領域であるSGAとPGAについて紹介します。

SGA

SGAとは、System Global Area(システムグローバル領域)の略称で、ORACLEデータベースにおけるメモリ領域です。ORACLEはインスタンスが起動されたタイミングで、初期化パラメータの値に沿って、SGA領域を確保します。

SGAはORACLEのサーバプロセス、及びバックグラウンドプロセスの間で共有されるメモリ領域で、大きく6つの要素から構成されます。

SGAの構成要素

SGAの構成要素は次の通りです。
・データベースバッファキャッシュ
一度読み込んだデータをキャッシュする役割と更新データをバッファしておく役割を担います。仕組みについては「データベースバッファキャッシュとは」でもう少し詳しく紹介していますので参考にしてください。

・共有プール
次の3つのキャッシュから構成されます。
ライブラリキャッシュ、ディクショナリキャッシュ、結果キャッシュの3つです。仕組みについては、「共有プールとは」でもう少し詳しく紹介していますので参考にしてください。

・REDOログバッファ
REDOログファイルに書き込まれる前のREDOデータを格納しています。

・Javaプール
OracleJVMで利用されるメモリ領域です。

・Streamsプール
OracleStreamsと呼ばれる機能利用するためのメモリ領域です。

ORACLEのメモリは、プロセス間で共有されるSGAの他に、個々のプロセスに割り当てられるPGAがあります。用途が大きく異なりますのでご注意ください。

PGA

PGAとは、Program Global Area(プログラムグローバル領域)の略称で、ORACLEデータベースにおけるメモリ領域です。

PGAは、バックグラウンドプロセス、及びサーバープロセスに個々に割り当てられるメモリ領域です。そのため、SGAとは異なり、プロセス間で共有されることはありません。あるプロセスに割り当てられたメモリは他に利用・共有されることはありません。

PGAの構成要素

PGAは、大きく2つの要素から構成されており、セッションメモリとSQL領域から構成されます。

・セッションメモリ
セッション情報を格納しています。

・SQL領域
SQL実行時の作業領域として、データの並べ替えをするときなどに利用します。

ちなみに、大量データをSELECTし、データの並べ替えを行った場合、確保しているSQL領域が十分でない場合、代わりに一時表領域を利用することがあり、SQLが遅くなることがあります。

SQLを変更せずにソートをチューニングする方法」や「SQLのソート処理が遅い場合のチューニング方法」でもう少し詳しく紹介していますので参考にしてください。