
共有プールとは?
Oracleインスタンスの中の、SGA(システム・グローバル領域)の中に存在する領域の一つです。
共有プールの構造
共有プールは、主に「ライブラリキャッシュ」と「データ・ディクショナリキャッシュ」に分かれます。
ライブラリキャッシュ
共有SQL領域(解析済みSQL情報)
「SQLの解析結果(SQLをコンピュータが理解できる形式に変換したもの)」と、「実行計画」が含まれる。解析を行う際に、この領域に同一SQLの解析済みの結果が含まれていれば、Oracleはそれを利用します。
なお、同一のSQLかどうかは、SQLのテキストで比較をされます。
プライベートSQL領域
ランタイム領域
SQLの実行時に使用する情報が含まれています。大部分が、ソート等の作業領域に使われて、SQL実行後に解放されます。
持続領域
対応するカーソルがクローズされるまで格納されます。
メモリ節約のためには、プログラム側で、再び使うことがないカーソルはクローズすべきです。
データ・ディクショナリ・キャッシュ
SYSTEM表領域にある「データディクショナリ」の情報が格納されています。
具体的には、Oracle内部の構成情報(直近で使われたテーブル列の定義、ユーザー名、パスワード、権限等の情報)が格納されます。
データディクショナリキャッシュのメリット
データディクショナリの情報は、様々な処理で呼び出されます。
この領域にキャッシュしておくことで、ディスクアクセスの回数を減らして、パフォーマンスの向上を図ることができます。
共有プールのキャッシュ情報が削除されるタイミング
Oracleは、共有プールに保管された情報はLRUリストで管理しています。
なので、もし新しい情報を共有プールに書き込まなくてはいけなくなった場合は、「使用されてから最も時間が経過したデータ」を削除するアルゴリズムになっています。
共有プールのキャッシュの削除はOracle自体の再起動などで行われますが常時稼働が求められるDBを安易に再起動はできませんよね。その場合は以下のコマンドを実行します。
1 |
ALTER SYSTEM FLUSH SHARED_POOL; |
SQLの性能測定などをしたい場合は上記の実行をして測定する必要があります。
共有プールのサイズ確認
1 |
SELECT * FROM v$sgastat WHERE name = 'free memory' AND pool = 'shared pool'; |
Oracleの動的なステータスを確認できます。
この記事へのコメントはありません。