共有プールは、データベース・インスタンス内のシステム・グローバル領域(SGA)のコンポーネントです。様々なタイプのプログラム・データをキャッシュする必要があります。たとえば、共有プールには、解析済のSQLやPL/SQLのコード、システム・パラメータ、データ・ディクショナリ情報などが格納されます。データベースで発生するほぼすべての操作には、共有プールが含まれます。たとえば、ユーザーがSQL文を実行する場合にも、Oracle Databaseは共有プールにアクセスします。
共有プールは、次のサブコンポーネントで構成されます。
- ライブラリ・キャッシュとは、実行可能なSQLコードやPL/SQLコードが格納されている共有プール・メモリー構造です。このキャッシュには、SQLとPL/SQLの共有領域と、ロックやライブラリ・キャッシュ・ハンドルなどの制御構造が含まれます。SQL文が実行されると、データベースでは、以前に実行されたコードの再利用が試みられます。解析されたSQL文の表現がライブラリ・キャッシュに存在し、共有できる場合は、コードが再利用されます。この処理は、ソフト解析またはライブラリ・キャッシュ・ヒットと呼ばれます。そうでない場合は、データベースでアプリケーション・コードの実行可能バージョンを新規に作成する必要があり、これはハード解析またはライブラリ・キャッシュ・ミスと呼ばれます。
- 予約プールは共有プール内のメモリー領域であり、Oracle Databaseで大量の連続したメモリーのチャンクを割り当てる場合に使用できます。データベースによって、共有プールからメモリーがチャンクで割り当てられます。チャンクを使用することによって、単一の連続した領域がない場合でもキャッシュに大きなオブジェクト(5KBよりも大きいオブジェクト)をロードできます。これにより、データベースでは、断片化によって連続したメモリーが使用できなくなる可能性が低減されます。
- データ・ディクショナリ・キャッシュは、データベース・オブジェクト(つまり、ディクショナリ・データ)に関する情報を格納します。このキャッシュは、バッファではなく行としてデータを保持するため、行キャッシュとも呼ばれます。
- サーバー結果キャッシュは、同じインフラストラクチャを共有するSQL問合せ結果キャッシュおよびPL/SQLファンクション結果キャッシュを含む共有プール内のメモリー・プールです。SQL問合せ結果キャッシュには、問合せおよび問合せフラグメントの結果が格納されます。ほとんどのアプリケーションにとって、このキャッシュによるパフォーマンス向上は有益です。PL/SQLファンクション結果キャッシュには、ファンクションの結果セットが格納されています。結果キャッシュは、比較的静的なデータに依存し、頻繁に起動されるファンクションに適しています。
- その他のコンポーネントには、エンキュー、ラッチ、情報ライフサイクル管理(ILM)ビットマップ表、アクティブ・セッション履歴(ASH)バッファ、その他のマイナーなメモリー構造があります。エンキューは、データベース・リソースへのアクセスをシリアライズする共有メモリーの構造(ロック)です。エンキューは、セッションまたはトランザクションと対応付けることが可能です。たとえば、制御ファイル・トランザクション、データファイル、インスタンス・リカバリ、メディア・リカバリ、トランザクション・リカバリ、ジョブ・キューなどがあります。ラッチは、SGA内の共有データ構造を同時アクセスから保護するための低レベルのシリアライズ制御メカニズムとして使用されます。たとえば、行キャッシュ・オブジェクト、ライブラリ・キャッシュ・ピン、ログ・ファイルのパラレル書込みなどがあります。