Hitachi

Cosminexus V11 アプリケーションサーバ システム設計ガイド


8.5.2 ステートメントプーリングを使用する

ここでは,ステートメントプーリングを使用する利点と,設定の指針について説明します。

この機能は,DB Connectorを利用している場合に使用できる機能です。また,使用できるかどうかは,EISとの接続方法によって異なります。XDM/RD E2 11-01以前のバージョンの場合,ステートメントプーリングは使用できません。詳細は,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.14.4 ステートメントプーリング」を参照してください。

〈この項の構成〉

(1) ステートメントプーリングを使用する利点

データベースにアクセスするときに必要なSQL文やストアドプロシジャなどのステートメントの生成は,負荷が高くなる処理です。ステートメントプーリングを使用することで,負荷を軽くできます。ステートメントプーリングは,一度生成したステートメントであるPreparedStatementとCallableStatementをプーリングしておき,それを再利用することで処理性能の向上を図る機能です。データベースなどにアクセスするたびにステートメントを再生成する場合に比べて,処理性能が向上します。

なお,PreparedStatementおよびCallableStatementとは,それぞれ,JDBCのAPIであるjava.sql.PreparedStatementとjava.sql.CallableStatementのインスタンスです。

(2) 設定の指針

ステートメントプーリングを利用するためには,アプリケーション開発時に次の点に留意する必要があります。

これらを満たさないアプリケーションでは,ステートメントプーリングは有効に動作しません。

また,ステートメントプーリングを使用するときには,コネクションプーリングとの関連を理解した上で使用してください。アプリケーション構成および環境設定時に留意する点を次に示します。

コネクションプールとステートメントプールの関係を次の図に示します。

図8‒7 コネクションプールとステートメントプールの関係

[図データ]

ステートメントプーリングのプールサイズを決めるときには,業務処理の内容に応じて,コネクションプーリングとの関係を考慮した上で決めてください。例えば,異なる業務処理で同じデータベースを使用する場合であっても,異なるテーブルにアクセスする場合や異なるSQL文を使用する場合は,一つのDB Connectorでコネクションプールとステートメントプールのサイズを大きくするよりも,業務処理ごとに別々のDB Connectorを用意して,その業務で必要な分だけの小さなコネクションプールやステートメントプールを用意する方が,効率が良い場合があります。

図8‒8 業務処理に応じたコネクションプールとステートメントプールの利用

[図データ]

ただし,DB Connectorを複数用意してプールサイズを小さくすると,業務ごとにプールされているコネクション数の余裕がなくなり,アクセスのピーク時にコネクション不足が発生するおそれがあります。このため,業務の同時実行数などを詳細に見積もって,コネクション数不足ができるだけ発生しないようにチューニングしてください。また,プールのサイズは,業務処理ごとに,どのくらいのステートメントを利用するかによって調整してください。

一つのDB Connectorを利用する場合のステートメントプールサイズは,次の値を集計して決定します。なお,DB Connectorが内部でステートメントプールを一つ利用することを考慮してプールサイズを見積もってください。

PreparedStatementのプールサイズを設定する指針とサイズの算出方法

コネクションごとのJDBCドライバのリソース制限を上限として,同一のDB Connectorを利用するPreparedStatementの利用数を基に算出してください。なお,JDBCドライバのリソース制限については,使用しているJDBCドライバの制限値に従ってください。

利用数は,次の数を集計して求めます。

  • サーブレットおよびJSPから,異なる引数を指定してjava.sql.Connection#prepareStatementメソッドを呼び出している数

  • Session BeanおよびEntity Bean(BMP)から,異なる引数を指定してjava.sql.Connection#prepareStatementメソッドを呼び出している数

  • Entity Bean(CMP)に対して,J2EEサーバが内部的にPreparedStatementで使用するSQLの数

  • Message-driven Beanから,異なる引数を指定してjava.sql.Connection#prepareStatementメソッドを呼び出している数

CallableStatementのプールサイズを設定する指針とサイズの算出方法

コネクションごとのJDBCドライバのリソース制限を上限として,同一のDB Connectorを利用するCallableStatementの利用数を基に算出してください。なお,JDBCドライバのリソース制限については,使用しているJDBCドライバの制限値に従ってください。

利用数は,次の数を集計して求めます。

  • サーブレットおよびJSPから,異なる引数を指定してjava.sql.Connection#prepareCallメソッドを呼び出している数

  • Session BeanおよびEntity Bean(BMP)から,異なる引数を指定してjava.sql.Connection#prepareCallメソッドを呼び出している数

  • Message-driven Beanから,異なる引数を指定してjava.sql.Connection#prepareCallメソッドを呼び出している数