1 UCPの概要
この章の内容は次のとおりです。
1.1 接続プールの概要
接続プールは、データベース接続オブジェクトのキャッシュです。オブジェクトは、アプリケーションでデータベースへの接続に使用できる物理的なデータベース接続を表します。実行時に、アプリケーションはプールに接続をリクエストします。リクエストを満たすことができる接続がプールにある場合、その接続がアプリケーションに戻されます。接続が見つからない場合は、新しい接続が作成されてアプリケーションに戻されます。アプリケーションは、その接続を使用してデータベースで処理を実行した後、オブジェクトをプールに返します。その接続は次の接続リクエストに使用できます。
接続プールは、接続オブジェクトが再利用されるようにして、接続オブジェクトが作成される回数を減らします。接続プールにより、データベース集約型のアプリケーションのパフォーマンスは大幅に向上します。これは、接続オブジェクトの作成には時間とリソースの両面でコストがかかるためです。ネットワーク通信、接続文字列の読取り、認証、トランザクション参加、メモリー割当てなどのタスクはすべて、接続オブジェクトの作成に必要な時間およびリソースの一因となります。また、接続がすでに作成されているので、アプリケーションが接続を取得するための待機時間が短くなります。
多くの場合、接続プールには、プールのパフォーマンスを最適化するために使用されるプロパティが用意されています。これらのプロパティにより、プールで許容される最小および最大接続数や、接続がプールに返されるまでアイドル状態でいられる時間などの動作が制御されます。最適に構成された接続プールでは、短いレスポンス時間とプール内の接続を維持するために消費されるメモリーとのバランスがとられます。多くの場合、特定のアプリケーションに対して最適なバランスを実現するまでに、様々な設定を試す必要があります。
1.3 ユニバーサル接続プールの概要
UCPは、JDBC接続をキャッシュするための接続プールを実装します。データベース集約型のJavaアプリケーションでは、この接続プールを使用することでパフォーマンスが向上し、システム・リソースをより効率的に利用します。
UCP JDBC接続プールでは任意のJDBCドライバを使用して物理接続を作成することができ、作成した接続はプールで管理されます。このプールは構成可能で、アプリケーションのパフォーマンス要件や可用性要件に基づいてプールの動作を最適化するために使用するプロパティが一式用意されています。さらに高度なアプリケーションでは、UCPのプール・マネージャを使用して、プール・インスタンスを管理できます。
また、プールは、Oracle Real Application Clusters (Oracle RAC)データベースを通して使用できる多くの高可用性およびパフォーマンス機能を利用します。これらの機能には、高速接続フェイルオーバー(FCF)、実行時接続ロード・バランシング(RLB)および接続アフィニティがあります。
ノート:
Oracle Database 11gリリース2から、単一インスタンス・データベースでのFCFもOracle Restartでサポートされます。Oracle Restartは、独立サーバー用のOracle Grid Infrastructureとも呼ばれます。
関連項目:
Oracle Restartの詳細は、『Oracle Database管理者ガイド』を参照してください。
1.3.1 概念アーキテクチャ
アプリケーションは、UCPプール対応のデータソースを使用して、UCP JDBC接続プール・インスタンスから接続を取得します。PoolDataSource
データソースは標準接続(java.sql.Connection
)の取得に、PoolXADataSource
データソースはXA (eXtended API)接続(javax.sql.XAConnection
)の取得に使用されます。XAと非XAのどちらのUCP JDBC接続プールにも同じプール機能があります。
プール対応のデータソースは、コネクション・ファクトリ・クラスを利用して、プールで保持される物理的な接続を作成します。アプリケーションは、Connection
オブジェクトまたはXAConnection
オブジェクトを作成できるファクトリ・クラスの使用を選択できます。プール対応のデータソースには、コネクション・ファクトリ・クラスを設定するためのメソッドの他、ファクトリ・クラスでデータベースへの接続に使用されるデータベースURLおよびデータベース資格証明書を設定するためのメソッドがあります。
アプリケーションは、接続ハンドルをプールから流用してデータベースで処理を実行します。処理が完了すると、接続はクローズされ、接続ハンドルはプールに返されて再利用できるようになります。次の図では、アプリケーションとUCP JDBC接続プール間のやりとりの概念図を示します。
図1-1 UCP JDBC接続プールの概念図
関連トピック
1.3.2 接続プールのプロパティ
UCP JDBC接続プールのプロパティは、プール対応のデータソースで使用可能なメソッドを使用して構成されます。プールのプロパティは、プール・サイズの制御や失効した接続の処理、接続がプールに返されるまで流用された状態でいられる時間に関する自律的な決定に使用されます。プール・プロパティの最適な設定は、アプリケーションおよびハードウェアのリソースによって決まります。通常、アプリケーションが接続を取得するために必要な時間と、一定のプール・サイズの維持に必要なメモリー量との間にはトレードオフが存在します。多くの場合、特定のアプリケーションについて目標のパフォーマンスを実現する最適なバランスを見つけるには、実験が必要です。
関連トピック
1.3.3 接続プール・マネージャ
UCPには、接続プールの管理統制を必要とするアプリケーションで使用される接続プール・マネージャがあります。このマネージャは、プールのライフ・サイクルの明示的な制御およびプールのメンテナンスに使用されます。また、マネージャを使用すると、管理コンソールを介してアプリケーションのプールとその管理の容易さを公開できます。
関連トピック
1.3.4 高可用性およびパフォーマンスのシナリオ
UCP JDBC接続プールには、接続の高可用性およびパフォーマンスを確保するために使用される多くの機能があります。プールのリフレッシュや接続の検証など、これらの機能の多くは一般的なものであり、あらゆるドライバおよびデータベースの実装で機能します。実行時接続ロード・バランシング、接続アフィニティなど、これらの機能の一部は、Oracle JDBCドライバおよびOracle RACデータベースを使用する必要があります。
関連トピック
1.3.5 リアクティブ・ストリームの収集のためのJavaライブラリのサポート
Oracle Databaseリリース19cでは、リアクティブ・ストリームの収集をサポートするJavaライブラリが導入されています。これにより、ユーザーはデータをOracle Databaseに効率的にストリーミングできます。新しいJavaライブラリを使用すると、Javaアプリケーションは、大規模なクライアント・グループからデータを継続的に受信して収集できます。Oracle Databaseのダイレクト・パス・ロード・メソッドを使用してデータを挿入すると、収集プロセスがブロックされず、非常に高速になります。
このJavaライブラリは既存のUCP APIの拡張を使用しています。これにより、表パーティション、Oracle RAC接続アフィニティおよびシャーディングのサポートなどのデータベースの高可用性機能およびスケーラビリティ機能を収集プロセスに与えることができます。