共有プール(SHARED POOL)

共有プールには、ライブラリ・キャッシュ、ディクショナリキャッシュ、サーバーの結果キャッシュが含まれる。シーケンス(順序)のキャッシュもここに確保されている。

システム・グローバル領域(SGA) の構成要素の1つ

ライブラリ・キャッシュ

ライブラリ・キャッシュは、アプリケーションコード(コンパイル済)を保持している。

管理している情報

SQLカーソル(SQL)、PL/SQLコード、Javaコード etc

( SELECT NAMESPACE FROM V$LIBRARYCACHE; にて取得可能 )

注意 アプリケーションコードはテキスト文字列のハッシュコードで同一コード(SQL文 etc) をチェックしている。

( SELECT HASH_VALUE, SQL_TEXT FROM V$SQLAREA ; などで使用されている ) 
このSQLカーソルの再利用を行うために、バインド変数を使用し リテラル を使用禁止というローカルコーディングルールも存在する。 このとき「バインド変数名」も完全一致しなければ、同じカーソルは使用されない点に注意が必要である。

'SELECT a FROM table WHERE a = :a' がライブラリキャッシュに存在する場合

共有されない代表例
  SELECT a FROM table WHERE a = :data_a        変数名の不一致
  SELECT a FROM    table WHERE a = :a          空白の不一致
  SELECT a FROM table WHERE a=:data_a          空白の不一致
  SELECT /*+ hint */ a FROM table WHERE a = :a コメント部の不一致

ディクショナリ・キャッシュ

ディクショナリ・キャッシュは、データ・ディクショナリ の情報を保持している。

管理している情報

ユーザー名、プロファイル、セグメント
テーブルスペース情報、順序番号、
スキーマオブジェクトのメタデータ(定義データ) etc

( SELECT PARAMETER FROM V$ROWCACHE; にて取得可能 )

サーバーの結果キャッシュ Oracle 11g

サーバー側結果キャッシュは、問合せ結果キャッシュ および PL/SQL ファンクションの結果キャッシュの情報を保持している。

データベース・バッファ・キャッシュのようなディスクの IO を データブロック 単位でキャッシュしているものとは別のもの。

共有プールのクリア

定期的にシャットダウンできないような 24時間無停止状態で長期間運用を行なっている場合には、 稀に共有プールのメモリ内で著しいメモリの断片化 によりパフォーマンスに影響することがある。
そのような場合には利用者の少ない静かな時間帯に共有プールのフラッシュを行なうこと(※)で断片化を解消できる。 ただし、シーケンスのキャッシュもフラッシュされるので多くケースで欠番が発生する。

(※) システムのピークタイムで実行すると多数の SQL の再解析が要求されるため余計なトラブルを起こしたりする可能性がある。

ALTER SYSTEM FLUSH SHARED_POOL ;


関連初期化パラメータ

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)