8. JDBCデータソースのチューニング

JDBCデータソースのチューニングについて説明します。ここでは、主に、コネクションプール数に関するチューニングポイントについて説明しています。

以降の説明で、「設定方法」には、設定対象となる統合運用管理ツール上の項目名や、MOの属性名を記述しています。設定方法の詳細については、マニュアル「運用編(コンフィグレーション)」 - 「9. JDBCデータソースに関する設定」を参照してください。

 
8.1. コネクションプール数の設定

コネクションプール数の設定について説明します。

 
8.1.1. 最小プールサイズの設定

アプリケーションの性能に大きな影響があるため、最小プールサイズを適切にチューニングすることが重要です。

最小プールサイズ[minPoolSize]にはデフォルトで4が設定されています。最小プールサイズに、アプリケーションの動作スレッド数と同じ値を設定すると、最も高い性能を得ることができますが、反面、多くのコネクションやメモリなどの資源が必要となります。このため、一般的には、データベースサーバ側の接続数の制限に合わせてコネクションプール数のチューニングを行います。

最小プールサイズには、システム内で使用される全コネクション数がデータベースサーバ側の接続数の制限を越えない範囲で、アプリケーションの動作スレッド数か、それより小さい値を設定してください。コネクションプールは、アプリケーションプロセス毎に、JDBCデータソースの定義数分存在します。それらのコネクションプールの最小プール数を合計し、運用管理操作で必要となるコネクション数などを考慮した上で、最小プールサイズ、または、データベースサーバ側の接続数の制限値を調整してください。

最小プールサイズを超えて払い出されたコネクションは、アプリケーションが使い終わった後で破棄されます。その際、アプリケーションが使い終わった直後にコネクションが破棄されると、負荷が高い場合に、コネクションの接続および切断を繰り返すことで性能が極端に低下することが懸念されます。そのための対策として、コネクション解放の待ち合わせ時間[shrinkDelayTime]のデフォルト値が15秒に設定されています。それでもなお、度々コネクションの接続および切断が繰り返される状況になる場合は、コネクション解放の待ち合わせ時間を長くすることで性能を改善できます。

確認方法

アプリケーションの動作スレッド数は、最小プールサイズに設定する最大値です。その値と、負荷をかけた際の次の統計情報(使用中コネクションの最大数)の値を照らし合わせて、最終的に最小プールサイズに設定すべき値を決定してください。

統合運用管理ツールで確認する場合:

運用管理コマンドで確認する場合:

統合運用管理ツールで設定する場合:

運用管理コマンドで設定する場合:

設定方法

統合運用管理ツールで設定する場合:

運用管理コマンドで設定する場合:

 
8.1.2.初期プールサイズの設定

初期プールサイズ[initialPoolSize]に0が設定されている場合、アプリケーションがコネクションを取得する際に、必要に応じて接続されます。このため、業務の運用開始直後は、コネクションの接続を行う分、業務の性能が悪くなります。

EJBアプリケーションやWebアプリケーションでは、初期プールサイズで指定された数のコネクションが、アプリケーションプロセス起動時に予め接続されていますので、業務の運用開始直後の性能劣化を防ぐことができます。

初期プールサイズには、最小プールサイズで指定された数以下の値を指定してください。

設定方法

統合運用管理ツールで設定する場合:

運用管理コマンドで設定する場合:

 
8.1.3. 最大プールサイズの設定

特定のアプリケーションプロセスで、極端に多くのコネクションを取得してしまうと、他のアプリケーションプロセスでデータベースに接続できなくなってしまう恐れがあります。このような状況を防止するための対策としては、最大プールサイズの設定が有効です。最大プールサイズ[maxPoolSize]には、最小プールサイズよりも大きく、データベースサーバ側の最大接続数よりも小さい値を設定してください。

設定方法

統合運用管理ツールで設定する場合:

運用管理コマンドで設定する場合:

 
8.2. その他の設定

その他の設定について説明します。

 
8.2.1. ステートメントの最大プール数の設定

JDBCドライバでステートメントプール機能をサポートしている場合、その機能を利用することで、ステートメントの生成コスト分の性能を改善することができます。

JDBCデータソースがサポートするJDBCドライバの中では、OracleとSequeLinkのJDBCドライバで、ステートメントプール機能をサポートしています。

ステートメントプール機能では、文字列化されたSQL命令をキーにしてステートメントの検索が行われます。このため、文字列化されたSQL命令に、可変の値が含まれないjava.sql.preparedStatementを利用し、検索効率を高めることが重要です。

設定方法

統合運用管理ツールで設定する場合:

運用管理コマンドで設定する場合: