一.概要
接続プールを有効化し、データベースへのアクセス、利用、配分、管理ストラテジーを設定できます。接続プール内の接続は効率 良く 、安全に再利用することができ、頻繁な接続・リリースが避けられます。また、接続プールがJDBCの接続を抽象化しており、ソフトウェアからデータベースへのアクセス(特に事務的アクセス)が便利になり、接続効率を高められます。接続プールが、ソフトウェアのロジックとデータベースへのアクセスロジックとを隔離しており、接続の再利用を可能にします。
接続プール状態から、データベースの接続プールの状態を確認できます。
二.操作手順
1.ページ紹介
注意:JDBC方式のデータベースのみ 接続プールの設定ができます。
デザイナビルドイン管理ポータルを例とします。
1.デザイナを開き、[ヘルプ]-[製品デモ]を押して、ポータルに入ります。
2.[システム管理]-[データ接続]-[接続プール状態]から接続プール状態を確認します。
3.データ接続の現在/最大のアクティブ接続数/アイドル接続数を確認できます。下の画像の通りです。
2.接続プールの構造
接続プールは、主に三つの要素があります:接続プールの有効化、接続の管理、接続プールの無効化。
1.接続プールの有効化
アプリケーションから作成された接続プールは、静的接続プールです。静的接続プールの、接続プール内の接続はシステムの起動から配分済みとなっており、接続を閉じることができません。Javaには、Vector、Stack、Servlet、Bean等、接続プールを構築することができる様々なコンテナクラスが提供されています。接続属性ファイルConnections.propertiesを読み取ることで、データベースと接続します。接続は、システムが起動する時に設定に従って作成され、接続プールへと保存されます。必要となると、接続プールからそれを読み取るため、接続と切断のコストがなくなります。
2.接続プールの管理
接続の管理ストラテジーは、接続プールメカニズムの中核で、接続プールが作成された時、接続プール内の接続を管理し、その配分とリリースをする方法によって、システムの性能が大きく変わります。接続の配分・リリース方式次第では、接続の利用効率が上がり、新たに接続するコストが少なくなり、アクセスも速くなります。ここでは、接続プール配分・リリースのストラテジーについて紹介します。
接続の再利用には、接続プール配分・リリースのストラテジーが非常に重要です。ここでは、主流のReference Counting(参照カウント)方式を利用しています。このモードはリソース再利用によく使われ、引用数によって配分とリリースを決定する方式です。各データベースへの接続に引用カウンターを保留することによって、利用者数を計算します。
具体的な方法は、以下の通りです。
ユーザがデータベースの接続をリクエストする時、まず接続プールにアイドル接続(まだ配分されていない接続)があるか確認します。アイドル接続がある場合、それをユーザに配分して、相応の処理をする(接続を使用中とマークし、引用数に1を足す)。アイドル接続がない場合、現在の接続数がmacConn(最大接続数)に達しているか確認します。達していなると、新たな接続を作成して、ユーザに配分します。達していると、maxWaitTime(最大待ち時間)まで接続を待って、maxWaitTimeが過ぎてもアイドル接続がなければ、呼び出し元にエラーメッセージが送られます。
ユーザがデータベース接続をリリースする時、まず接続の引用数が設定値を超えているか確認します。超えていると接続を削除して、接続プール内の接続数がminConn(最小接続数)を下回っているか確認します。下回っている場合、接続プールを充填し、そうでない場合、再利用できるよう、接続を解放状態に設定します。以上の方法で、データベース接続の効率的な再利用が保障され、頻繁な接続・リリースからのコストが削減されます。
3.接続プールのシャットダウン
アプリを止める時、接続プールを閉める必要があります。その時、接続プールを作成する時に請求した接続オブジェクトをデータベースに戻さなければなりません(つまりすべてのデータベース接続を閉じること)。これは、接続プールの作成と逆方向の操作です。
接続プールが接続を配分します。例えばデータセットを定義することにします。[プレビュー]をクリックして、SQL文の実行が終わると、接続が接続プールに返されます。
3.接続プールの属性
Finereportは、DBCP接続プールを利用しています。ここでは、その設定方法や属性のパラメータの意味について紹介します。例えばテンプレートにアクセスするとき、次のように接続のタイムアウトの警告メッセージが送られることがあります:
Warring:Cannot get a connection, pool error Timeout waiting for idle objectat com.fr.third.org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)at com.fr.third.org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)at com.fr.data.pool.MemoryConnection.create(Unknown Source)at com.fr.data.impl.JDBCDatabaseConnection.createConnection(Unknown Source) |
その時は、接続数を多くしてください。
1.設定方法
下図のように、デザイナで[サーバ]-[データ接続定義]をクリックします。[接続プール属性]をクリックすると、[接続プール属性]の設定が表示されます。[最大アクティブ接続数]を設定します。
2.パラメータ設定
名称 | 例示 | 意味 |
接続数の初期化 | initialSize="1" | 最初の接続数。最初は、データベースと1つの接続を作ります。 |
最大アクティブ接続数 | maxActive="200" | オブジェクトプールから取得できる最大のオブジェクト数。0にすると、無制限となります。 |
最大アイドル接続数 | maxIdle="100" | アイドル接続数の最大値(オブジェクトプール内の最大の個数)。0以下にすると、無制限となります。 |
最小アイドル接続数 | minIdle="2" | オブジェクトプール内の最小オブジェクト数 |
最大待ち時間(ms) | maxWait="1000" | ミリ秒単位の最大待ち時間です。これを超えると、エラーとなります。 |
SQL認証のクエリ | validationQuery="SQL文" | 接続が成功しているか確認するため、SQLとSELECT文を実行します。 |
接続の取得前にチェックする | testOnBorrow="false" | 接続オブジェクトを取得する前に、オブジェクトの有効性を認証するか設定します。既定では[なし]と設定されています。 |
接続の戻す前にチェックする | testOnReturn="true" | 接続オブジェクトを戻す前に、オブジェクトの有効性を認証するか設定します。既定では[なし]とされています。 |
接続の有効性のチェックをオンにする | testWhileIdle="true" | アイドルな時に、オブジェクトの有効性を認証するか設定します。既定では[なし]と設定されています。 |
アイドル接続リサイクラー休眠時間(ms) | timeBetweenEvictionRunsMillis="1000" | 失効検査スレッドを実行する時間間隔。0または0以下にすると、検査スレッドが始まりません。 |
アイドル接続リサイクルのチェック回数 | numTestsPerEvictionRun="2" | 失効検査スレッドの実行回数 |
アイドル最小時間値保持 | minEvictableIdleTimeMillis="18005000" | 0以上の場合、接続のアイドル時間を計算します。0の場合、アイドル接続を認証しません。 |
最大アクティブ接続数設定が、データベースの接続数を超えていれば、データベースの接続数に制限されることになります。最大アクティブ数をより大きく設定するためには、データベースの接続数も調整しなければなりません。
