4.5 UCPでの接続の獲得について
4.5.1 UCPでの接続の獲得の概要
この機能は、プール内で一定数の接続を常に使用可能な状態にし、パフォーマンスの最大化に役立ちます。特に、アプリケーションで接続ハンドルをキャッシュする場合に便利です。通常、キャッシングはパフォーマンス上の理由から実行されます。これは、キャッシングにより、接続がトランザクションに参加するために必要となる状態の再初期化が最小限になるためです。
たとえば、接続はプールから流用され、必要なセッション状態で初期化された後、コンテキスト・オブジェクト内に保持されます。この方法で接続を保持することが、接続プールに使用可能な接続がなくなる原因になる可能性があります。接続獲得機能では、該当する場合に、流用された接続を回収して再利用できるようにします。
接続獲得は、HarvestableConnection
インタフェースを使用して制御し、接続獲得トリガー数と接続獲得最大数の2つのプール・プロパティを使用して構成または有効にします。接続獲得機能を実装するときは、これらのインタフェースおよびプロパティを併用します。
4.5.2 獲得可能への接続の設定
oracle.ucp.jdbc.HarvestableConnection
インタフェースのsetConnectionHarvestable(boolean)
メソッドは、接続を獲得するかどうかを制御します。このメソッドは、接続獲得が有効である場合にロック・メカニズムとして使用されます。たとえば、トランザクション内で接続が使用されていて接続の獲得を禁止する場合、このメソッドを接続に対してfalse
に設定します。トランザクションの完了後、このメソッドを接続に対してtrue
に設定すると、必要に応じて接続を獲得できます。
ノート:
接続獲得機能が有効である場合、デフォルトではすべての接続が獲得可能です。この機能が有効である場合、接続が獲得可能かどうかを明示的に制御するため、setConnectionHarvestable
メソッドを常に使用する必要があります。
次の例では、接続獲得機能で接続を獲得しようとしても接続が獲得不可であることを示す、setConnectionHarvestable
メソッドの使用例を示しています。
Connection conn = pds.getConnection(); ((HarvestableConnection) conn).setConnectionHarvestable(false);
4.5.4 獲得最大数の設定
接続獲得最大数プロパティは、獲得トリガー数に達した場合に、プールに返す必要がある流用された接続の数を指定します。実際に獲得される接続数は、0から接続獲得最大数の値までのいずれかです。最も長い間使用されていない接続から先に獲得されるため、非常にアクティブなユーザー・セッションが最大限に接続を保つことができます。
獲得最大数の値の範囲は、0
から最大接続数プロパティの値までです。デフォルト値は1
です。範囲外の値を指定すると、SQL例外がスローされます。
次の例では、接続獲得最大数の構成を示します。
pds.setConnectionHarvestMaxCount(5);
ノート:
-
接続獲得機能および中止接続タイムアウト機能が同時に有効になっている場合、タイムアウト処理では、獲得できないとして指定された接続を回収しません。
-
接続獲得機能およびTTL接続タイムアウト機能が同時に有効になっている場合、タイムアウト処理では、獲得できないとして指定された接続を回収します。
関連トピック