LoginSignup
5
6

More than 3 years have passed since last update.

JDBCにおけるコネクションプールの設定について調査してみた

Posted at

はじめに

弊社で運用しているシステムで突然、データベースに接続できない現象が発生した。
システムの中核と言われるデータベースに接続できない=システムが使えない状況に陥りました。

調査したところ、データベースに再起動が走ったため、アプリケーションサーバで抱えていたコネクションプールが全滅したのが原因でした。全滅後も、特に再接続が行われず、復旧までの間システムに死亡フラグが立ってしまいました。コネクションプールの設定も、サイズまわりは変更したものの他の設定はデフォルトのままでした。

技術スタック

項目 名称 バージョン
APサーバ Payara Server 4.1
言語 Java 8
DB Amazon Aurora PostgreSQL 9.6

現象

そもそもコネクションプールとは、コストがかかるDB接続を使いまわそうという仕組みです。
アプリサーバ起動時は次のような状態になってます。

1.png

接続な正常な場合、リクエスト時は以下のようになります。

スクリーンショット 2019-06-25 13.52.42.png

今回はデータベースが再起動され、以下のような状態になりました。

スクリーンショット 2019-06-25 13.57.28.png

この状態のまま、接続状態な異常のままコネクションプールに残り続け、アプリからは一切データベースに接続できなくなりました。

対応

対応としては、プール内にある接続を全て再接続させるようにすることです。

  • 接続状態を検証

2.png

  • プール内の接続を全て削除

3.png

  • 再接続

4.png

今回修正したパラメータ

パラメータの設定値は、環境に応じて適宜変更してください。

パラメータ 概要 設定値
connection-creation-retry-attempts 再接続リトライ回数 3
connection-creation-retry-interval-in-seconds 再接続リトライインターバル 10
is-connection-validation-required 接続検証の有無 true
validate-atmost-once-period-in-seconds 接続検証のインターバル 1
fail-all-connections 接続異常時に全てのプールを削除の有無 true
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6