Cosminexus 機能解説
コネクションプーリングを使用している場合,リソースダウン・ネットワーク障害などが発生すると,ユーザプログラムのコネクション取得要求に対し,障害が発生したコネクションを返すおそれがあります。コネクションの障害検知機能を使用すると,プーリングされているコネクションに障害が発生していないかをチェックし,障害が発生したコネクションをなるべく返さないようにできます。
コネクション障害検知機能は,コネクション取得リトライ機能と併用できます。この場合,ユーザプログラムのコネクション取得要求時にコネクション障害を検知すると,新しいコネクション取得のリトライを実施し※,障害が復旧した時点でコネクションをユーザプログラムに返すことができます。
- 注※
- 新しいコネクションを作成して返すことは,コネクションの障害検知のタイミングを「コネクション取得要求時」に設定している場合だけ有効になります。
- コネクションの障害検知のタイミングについては,「(1) 障害検知を実施するタイミング」を参照してください。
- <この項の構成>
- (1) 障害検知を実施するタイミング
- (2) 障害検知のタイムアウト
- (3) チェック時の動作
- (4) 前提条件
- (5) 注意事項
コネクションの障害を検知するタイミングは,表に示したタイミングのどちらかを選択できます。
表9-37 コネクションの障害検知のタイミング
障害検知のタイミング |
内容 |
コネクション取得要求時 |
コネクション取得時に,毎回,障害検知を実施します。この場合,コネクション取得要求のレスポンス性能が劣化しますが,障害が発生したコネクションを取得する確率は低くなります。コネクション取得要求の頻度が少ない場合や,障害が発生したコネクションの取得がほとんど許容されない場合に有用です。 |
一定間隔 |
一定時間の間隔で,障害検知を実施します。障害検知の間隔をある程度長くすることで,障害検知処理による性能劣化を少なくできます。ただし,障害が発生したコネクションを取得する確率は高くなります。コネクション取得要求の頻度が多い場合や,障害が発生したコネクションの取得がある程度許容される場合に有用です。 |
なお,デフォルトでは,コネクション取得要求時に障害検知を実施する設定となっています。コネクションの障害検知を実施しない設定もできます。
コネクション障害検知の有効・無効の切り替えや,検知するタイミングの設定は,リソースアダプタのプロパティとして設定します。リソースアダプタの設定については,マニュアル「Cosminexus システム構築ガイド」を参照してください。
(2) 障害検知のタイムアウト
コネクション障害検知に対する応答時間にタイムアウトを設定できます。
サーバ障害やネットワーク障害が発生してリソースからの応答が返らない場合,コネクション障害検知の実行に対しても応答が返らなくなることがあります。タイムアウトを設定することで,リソースからの応答が返らない場合も,コネクションのチェックを終了して,処理を継続できます。なお,障害検知のタイムアウト時間は5秒(固定)です。
コネクション障害検知のタイムアウトは,コネクション管理スレッドを使用して動作します。コネクション管理スレッドは,コネクションプールのコネクション数に応じてシステム内で作成されます。コネクション管理スレッドの数と,コネクションプールのコネクション数の最大値の関係を次に示します。
コネクション管理スレッド数 = コネクションプールのコネクション数の最大値×2
このため,コネクション障害検知にタイムアウトを設定すると,設定しない場合に比べて多くのメモリを消費します。必要なメモリ使用量を適切に見積もってください。
また,コネクションプールのコネクション数の最大値の設定が無制限の場合,メッセージが出力されて,コネクション障害検知のタイムアウトが無効になります。
なお,コネクション障害検知のタイムアウトを有効にする場合の注意事項の詳細については,「(5) 注意事項」を参照してください。
コネクション障害検知のタイムアウトの有効・無効は,リソースアダプタのプロパティをカスタマイズして設定します。リソースアダプタのプロパティの設定については,マニュアル「Cosminexus システム構築ガイド」を参照してください。
(3) チェック時の動作
コネクション障害検知をコネクション取得要求時に実施する場合と,一定間隔で実施する場合の動作について説明します。
- コネクション障害検知をコネクション取得要求時に実施する場合
コネクション障害検知をコネクション取得要求時に実施する場合の動作を次に示します。
- コネクションプールから未使用コネクションが取得されます。
- コネクションチェックメソッドによって,コネクションに障害が発生していないかどうかチェックされます。
コネクション障害検知のタイムアウトが無効な場合,このチェックはコネクション取得要求の延長で実施されます。
コネクション障害検知のタイムアウトが有効な場合,このチェックはコネクション管理スレッドで実施されます。サーバ障害やネットワーク障害などでチェックメソッドの応答が5秒以内に返らないときは,コネクションに障害が発生していると判断されます。このとき,メッセージが出力されます。
なお,リソースアダプタにコネクションチェックメソッドが実装されていない場合,コネクションの状態はチェックされません。
- コネクションに障害が発生している場合,チェックに使用したコネクションが破棄されて,新たに作成されたコネクションがユーザプログラムに返されます。
コネクションに障害が発生していない場合,チェックに使用したコネクションがユーザプログラムに返されます。
- コネクション障害検知を一定間隔で実施する場合
コネクション障害検知を一定間隔で実施する場合の動作を次に示します。
- コネクションプールから未使用コネクションが一つ取得されて,そのコネクションが有効であるかどうかがチェックされます。
ただし,未使用コネクションがプーリングされていない場合は,チェックされません。
- コネクション障害検知のタイムアウトが無効な場合,コネクションチェックメソッドによって,コネクションに障害が発生していないかどうかのチェックが一定間隔で実施されます。
コネクション障害検知のタイムアウトが有効な場合,コネクション管理スレッドで,チェックが一定間隔で実施されます。サーバ障害やネットワーク障害などでチェックメソッドの応答が5秒以内に返らないときは,コネクションに障害が発生していると判断されます。このとき,メッセージが出力されます。
なお,リソースアダプタにコネクションチェックメソッドが実装されていない場合,コネクションの状態はチェックされません。
- コネクションに障害が発生している場合に,コネクション障害検知のタイムアウトが無効のときは,コネクションチェックに使用されたコネクションが破棄されて,コネクションプール内の使用中コネクションが再利用不可にマークされます。また,未使用コネクションが破棄されます。
コネクション障害検知のタイムアウトが有効のときは,コネクションチェックに使用したコネクションが破棄されて,コネクション管理スレッドによってコネクションプール内の使用中コネクションが再利用不可にマークされます。また,未使用コネクションが,コネクションプールから取り除かれて,破棄されます。
コネクションに障害が発生していない場合は,コネクションチェックに使用されたコネクションがコネクションプールに返却されます。
コネクションの障害検知機能の利用可否を次の表に示します。
表9-38 コネクションの障害検知機能の利用可否
リソース |
接続方法 |
利用可否 |
データベース |
DB Connector |
○ |
データベース上のキュー |
DB Connector for Cosminexus RMとCosminexus RM |
○ |
OpenTP1 |
uCosminexus TP1 Connector |
×※1 |
TP1/Message Queue - Access |
×※1 |
SMTPサーバ |
メールコンフィグレーション |
× |
JavaBeansリソース |
− |
× |
そのほかのリソース |
Connector 1.0仕様またはConnector 1.5仕様に準拠したリソースアダプタ |
△※2 |
- (凡例)
- ○:使用できる ×:使用できない △:条件によって異なる −該当なし
- 注※1
- Application Serverが提供するコネクションの障害検知機能は使用できませんが,uCosminexus TP1 ConnectorまたはTP1/Message Queue - Accessでは,コネクションの障害検知機能と同様の機能が提供されています。
- 注※2
- Connector 1.5仕様に準拠したリソースアダプタを使用している場合に,リソースアダプタがValidatingManagedConnectionFactoryインタフェースのgetInvalidConnectionsメソッドを実装しているときに使用できます。
パラレルサーバ構成のリソースを使用する場合の注意事項と,コネクション障害検知のタイムアウトを有効にした場合の注意事項について説明します。
(a) パラレルサーバ構成のリソースを使用する場合の注意事項
コネクション障害検知を一定間隔で実施する場合,コネクションプール内のコネクションをサンプリングチェックするため,一部のサーバに障害が発生しても検知できないことがあります。
(b) コネクション障害検知のタイムアウトを有効にした場合の注意事項
コネクション障害検知のタイムアウトを有効にした場合の注意事項を次に示します。
- コネクション障害検知にタイムアウトを設定した場合,システム内で,コネクションプールのコネクション数に応じた障害検知用のスレッドが生成されます。このため,コネクション障害検知にタイムアウトを設定すると,設定しない場合に比べて多くのメモリを消費するので注意が必要です。
障害検知用のスレッドは,コネクションプールの最大コネクション数の2倍の数だけ作成されます。必要なメモリ使用量を適切に見積もってください。
- サーバ障害やネットワーク障害などが繰り返し発生する場合にシステムの運用を続けると,コネクションチェックメソッドを実行中のコネクション管理スレッドが増え続け,システム側が用意したすべてのコネクション管理スレッドを使い切るおそれがあります。使用できるコネクション管理スレッドがない場合,メッセージが出力されて,コネクション取得要求がエラーとなります。
- コネクション障害検知を一定間隔で実施する場合,コネクションプールから取り除いた未使用コネクションは,コネクションプール内のコネクション数としてカウントされません。そのため,コネクションプール内のコネクションとコネクションプールから取り除いた未使用コネクションの総数が,コネクションプールのコネクション数の最大値を超える場合があります。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.