RDBとの連携でコネクションプールを利用している場合、以下のようなエラーが発生することがあります。
- Communications link failure. (Connection reset)
- The connection does not exist.
コネクションプールを利用するとフロー終了後もコネクションが保持されます。そのあとにフローがリクエストされた場合、プールにコネクションがあればそれを利用し、プールになければ新たにコネクションを作成します。しかし、何らかの理由によってプールされたコネクションが解放される前にこのコネクションが強制的に切断されていた場合、そのプールされたコネクションを利用しようとした最初のフローで上記エラーが発生します。
原因としては、以下のものが挙げられます。
- データベースサーバーの再起動などにより、接続が切断された
- ファイアウォールが一定時間通信のないコネクションを強制的に切断した
- ネットワークの障害や不安定さにより、接続が切断された
そのコネクションを使用したフローが異常終了した場合、コネクションは解放されるため後続のフローでエラーは発生しません。
対処方法
エラーが発生した時の対処方法
エラーが発生した時、下記の対処方法があります。
フローの再実行
一時的な通信切断が原因の場合、フローの再実行で解消されることがあります。
コネクションプールのクリア
フローサービス管理コンソールの「データベース接続プールのクリア」機能でコネクションプールをクリアします。この操作により、プールされた無効なコネクションがすべて破棄され、次回のフロー実行時に新しいコネクションが作成されます。特に、データベースの再起動後には有効な対応となります。
下記ドキュメントをご参照ください。
エラーが頻発する場合の対処方法
エラーが頻発する場合、下記の対処方法があります。
コネクションプールを使用しない
コネクション設定でコネクションプールしないように設定を変更します。ただし、コネクション設定でコネクションプールしないようにした場合、フロー実行時にコネクションを作成する処理が増え、頻度が高い場合には処理時間などに影響を与える可能性があります。コネクションプールを使用する・使用しないのそれぞれの状態での処理時間の差異について、事前にご確認ください。
フローサービス管理コンソールでは、「設定」-「コネクション」-「RDB」画面で、各コネクション設定の「コネクションプール」項目で「OFF」を選択します。
フローデザイナーでは、コネクションペインで作成する各コネクション設定で「コネクションをプール」プロパティで「いいえ」を選択します。
コネクションプールのタイムアウト時間の短縮
管理コンソールの設定で、コネクションプールのタイムアウト時間を変更できます。初期値は7200秒です。
接続の実行頻度等の利用状況に依存するため、弊社として推奨値のご案内は行っておりません。加えて、タイムアウト値を極端に短く設定した場合は、その時間帯は処理が実行されない状態となり、結果としてコネクションプールを無効化した場合と同様の挙動となる可能性があるため効果は限定される可能性があります。設定値については、事前に動作検証を行うことを推奨いたします。
フローサービス管理コンソールの「設定」-「サービス」-「フロー」画面の「フローエンジン設定」の「コネクションプールタイムアウト」項目で変更します。
エラー処理フローでのフロー再実行
一時的な通信切断への対策として、エラー発生時に、エラー処理フローで対象フローを再実行する対応もご検討ください。