動的ロード・リクエストのためのOracleデータベースへのキャッシュ接続プールの管理
対象となるSELECT
文が動的な読取り専用キャッシュ表で発行され、そのデータがキャッシュ表に存在しない(が、Oracleデータベースの実表には存在する)場合、キャッシュ・ミスが発生します。その後、TimesTenは動的なロードを実行してOracleデータベースから(Oracleデータベースへの既存の接続または新しい接続を介して)データを取得し、行をキャッシュ・グループに挿入します。
デフォルトでは、TimesTenへのアプリケーション接続が閉じるまで、Oracleデータベースへのクライアント接続は開いたままです。アプリケーションで動的ロードが開始されると、各クライアント接続はOracleデータベースへの接続に関連付けられます(キャッシュを使用する場合)。複数のクライアント接続を使用する場合、Oracleデータベースへの新しいクライアント接続に対するTimesTenのリクエスト数が、Oracleデータベースに対して許可されているクライアントの最大接続数を超える可能性があります。
Oracleデータベースへの複数のクライアント接続に分散する動的ロード・リクエストがアプリケーションに複数ある場合がありますが、その場合、バックエンドのOracleデータベースに対するオープン・クライアント接続が多くなりすぎる可能性があります。または、同じOracleデータベースに対して動的ロードを実行する複数のTimesTenデータベースにアプリケーションが存在する場合があります。サーバーごとに複数のクライアント接続を持つクライアント/サーバー・アプリケーションの場合は、Oracleデータベースからの動的ロード処理に使用されるすべてのクライアント接続にキャッシュ接続プールを使用するようにTimesTenを構成できます。プールされた接続はすべてのクライアント接続間で共有されるため、キャッシュ接続プールを利用できるのは、クライアント接続を使用するアプリケーションのみです。
動的ロード要求では、(新規接続を作成するのではなく)キャッシュ接続プールからOracleデータベースへの既存のクライアント接続を使用して、オープン・クライアント接続の合計数を減らします。動的ロード要求が完了したら、接続はキャッシュ接続プールに戻されます。
キャッシュ接続プールから既存の接続を使用すると、次のようにアプリケーションのパフォーマンスが最適化されます。
-
新しくリクエストした接続ごとに専用のOracleサーバー・プロセス(またはスレッド)を開始するコストを削減します。
-
各プロセス(スレッド)を単一の接続専用にするのではなく、クライアント接続間で共有することにより、Oracleサーバー・プロセス(スレッド)の合計数を減らします。ただし、キャッシュ接続プールに使用可能なクライアント接続がない場合、動的ロード処理は接続がプールに追加されるまで待機します。
-
クライアント接続間のセッション・レベルのサーバー・リソース(メモリーなど)の共有を有効にします。
接続がキャッシュ接続プールに戻されると、アプリケーションはクライアント接続が切断されている状態と論理的に認識します。したがって、アプリケーションにパススルー文(Oracleデータベースで実行されるDDLまたはDML文)が含まれる場合、動的ロードをリクエストするかエラーがスローされる前に、パススルー文をコミットまたはロールバックする必要があります。自動コミットをON
に設定するか、動的ロードの前にトランザクション内でコミットまたはロールバックを実行できます。
ノート:
アプリケーションで実行される動的ロード・リクエストの数が予想より多く、パフォーマンスが重要な場合は、次のいずれかを考慮できます。
-
キャッシュ接続プールを使用して、すべてのアプリケーションからDDL文またはDML文を含むパススルー文を削除するか最小限に抑えます(これにより、パフォーマンスが低下する可能性があります)。
-
パススルー文を使用してTimesTenを介してSQLを間接的に実行するのではなく、Oracleデータベースに対するまったく別のクライアント接続を直接維持して、SQLをOracleデータベースに対して直接実行します。
キャッシュ接続プールを使用するかどうかを判断するには、アプリケーションがOracleデータベースから多数の動的ロード処理をリクエストした(そのためOracleデータベースへのオープン・クライアント接続が多くなりすぎます)かどうかを評価します。
次の各項では、動的な読取り専用キャッシュ・グループ用のキャッシュ接続プールの使用方法を説明します。