【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のソート処理が遅い場合のチューニング方法」でもう少し詳しく紹介していますので参考にしてください。