4.6 UCPでのSQL文のキャッシングについて

この項では、次の項でUCPでSQL文をキャッシュする方法について説明します。

4.6.1 UCPでの文キャッシングの概要

文キャッシングにより、文の処理はより効率的になります。文キャッシングでは、繰り返し使用される実行可能な文をキャッシングすることでパフォーマンスが向上し、プログラマがコンパイル済の文を明示的に再利用する必要がなくなります。また、繰り返されるカーソルの作成、繰り返される文の分析および作成によるオーバーヘッドを解消し、アプリケーションとデータベース間の通信のオーバーヘッドを削減します。文キャッシングと再利用は、アプリケーションに対して透過的です。各文キャッシュは、物理的な接続に関連付けられます。つまり、物理的な接続はそれぞれ独自の文キャッシュを保有します。

キャッシュされた文の一致条件は次のとおりです。

  • 文のSQL文字列は、キャッシュ内のものと同一(大/小文字を区別)である必要があります。

  • 文の種類は、キャッシュ内のものと同一(preparedまたはcallable)である必要があります。

  • 文によって生成される結果セットのスクロール可能タイプは、キャッシュ内のものと同一(forward-onlyまたはscrollable)である必要があります。

文キャッシングは、JDBCドライバのベンダーによって異なる方法で実装および有効化されます。この項の説明は、OracleのJDBCドライバ固有のものです。他のベンダーのドライバでの文キャッシングは、コネクション・ファクトリで接続プロパティを設定することで構成できます。JDBCベンダーのドキュメントを参照して、文キャッシングがサポートされているかどうか、接続プロパティとして設定できるかどうかを確認してください。UCPでは、JDBCベンダーが文プーリングをサポートする場合は、文プーリングを有効にするためのJDBC 4.0(JDK16)APIがサポートされません。

関連トピック

4.6.2 UCPでの文キャッシングの有効化

最大文数プロパティは、接続ごとにキャッシュする文の数を指定します。このプロパティは、Oracle JDBCドライバにのみ適用できます。このプロパティを設定しない場合、または0に設定する場合、文キャッシングは無効になります。デフォルトでは、文キャッシングは無効です。文キャッシングを有効にすると、文キャッシュは、接続プールで保持される物理的な接続のそれぞれに関連付けられます。1つの文キャッシュは、すべての物理的な接続で共有されません。

次の例では、文キャッシングの有効化を示します。

pds.setMaxStatements(10);

文キャッシュ・サイズの決定

キャッシュ・サイズは、アプリケーションがデータベースに対して発行する個々の文の数に設定する必要があります。アプリケーションがデータベースに対して発行する文の数が不明な場合、JDBCパフォーマンス・メトリックを使用して文キャッシュ・サイズの決定に役立てます。

文キャッシュ・サイズのリソース問題

接続はそれぞれ独自の文キャッシュに関連付けられます。接続の文キャッシュ内に保持される文が、データベース・リソースを保持し続ける場合があります。オープンされた接続の数と各接続のキャッシュされた文の数の合計が、データベースで許容されるオープン・カーソルの限度を超える可能性があります。この問題は、キャッシュ内で許容される文の数を減らすか、データベースで許容されるオープン・カーソルの限度を増やすかすることで、回避できます。