接続プール
接続プールは、接続管理のオーバーヘッドを軽減し、 データ・アクセスの開発タスクを削減するのに役立ちます。
アプリケーションは、 バックエンド・ストア (データベースなど) にアクセスしようとするたびに、 リソースがそのデータ・ストアへの接続を作成、保守、および解除するように要求します。 このプロセスによってアプリケーション・リソース全体にかかる負荷を軽減するために、 Application Server では、 アプリケーション・サーバー上でアプリケーションが共有可能なバックエンド接続のプールを 管理者が設定できるようにしています。 接続のプールは 複数のユーザー要求の間に接続オーバーヘッドを分散し、それによって、 将来の要求のためのアプリケーション・リソースを保護します。
Application Server は、接続のプールおよび接続再利用で JDBC 4.0 API をサポートしています。 接続プールは、アプリケーション内での直接の JDBC 呼び出しに使用されるとともに、 データベースを使用するエンタープライズ Bean にも使用されます。
接続プールの利点
接続プールにより、接続を必要とするアプリケーション、 特に Web ベース・アプリケーションの応答時間を改善することができます。 ユーザーが Web 上でリソースに要求を行うと、そのリソースはデータ・ソースにアクセスします。 ユーザーはインターネット上のアプリケーションに対して頻繁に接続と切断を繰り返すため、 データ・アクセスへのアプリケーション要求のボリュームがかなり大きくなる場合があります。 その結果、データ・ストア・オーバーヘッドの合計が Web ベース・アプリケーションにとって急激に大きくなり、 パフォーマンスが低下します。 接続プール機能を使用すると、 Web アプリケーションで、標準の結果の最大で 20 倍のパフォーマンス向上を実現できます。
接続プールを使用すると、データ・ソースは接続プールから既存の接続を探し出してそれを使用できるので、 ほとんどのユーザー要求では、新規接続を作成する場合のオーバーヘッドが発生することはありません。 要求が満たされ、応答がユーザーに戻されると、 リソースはその接続を接続プールに戻して再使用に備えます。 切断のオーバーヘッドは発生しません。 個々のユーザー要求により、 わずかながら接続または切断の負荷がかかります。 初期リソースを使用してプールに接続を生成しておけば、 既存の接続が再使用されるので、 追加のオーバーヘッドはわずかですみます。
接続プールを使用する場合
接続プールは、以下の基準のいずれかを満たすアプリケーションで使用します。
- アプリケーションが、接続を使用するたびに接続を取得したり解放したりするオーバーヘッドを許容できない。
- Application Server 内に Java™ Transaction API (JTA) トランザクションが必要です。
- 複数ユーザー間で同じトランザクションの接続を共有する必要がある。
- アプリケーション・サーバーでローカル・トランザクションを管理するために、 製品フィーチャーを利用する必要がある。
- アプリケーションが、所有する接続のプールを管理しない。
- アプリケーションが、接続を作成する場合の詳細 (データベース名、ユーザー名、パスワードなど) を管理しない。
接続をプールする方法
固有のデータ・ソースまたは接続ファクトリーを構成する場合は、固有の Java Naming and Directory Interface (JNDI) 名を指定する必要があります。 この JNDI 名は、その構成情報とともに、接続プールを作成するために使用されます。 構成されるデータ・ソースまたは接続ファクトリーごとに、 個別の接続プールが存在します。
すべてのサーバーが myDataSourceを使用する 3 つのサーバー・クラスターを実行し、 myDataSource の「最大接続数」設定が 10 の場合、最大 30 の接続 (3 つのサーバー × 10 の接続) を生成できます。
バックエンド・リソースがサポートできる接続数に、 このような動作がどの程度影響を与えるかを検討してください。 詳しくは、トピック『接続プール設定』を参照してください。
- それぞれのエンティティー Bean トランザクションには、 トランザクション処理専用の、追加のデータベース接続が必要です。
- クローンを使用する場合、各クローンに対して 1 つのデータ・プールが存在します。
サポートされる UNIX システムでは、接続ごとに別個の DB2® プロセスが作成されます。これらのプロセスは、メモリーが少なく、エラーの原因となるシステムのパフォーマンスに迅速に影響します。
接続の共有を使用する際には、同じ接続プールから取得した接続しか共有できない点に注意することも重要です。