TCP Keep-AliveとDBコネクションプールの関係
TCP/IP
enableKeepAliveはTCPレベルのKeep-Alive設定で、コネクションプールの動作とは別の概念。
TCP Keep-Aliveとは
- OSレベルで定期的に「生存確認パケット」を送信
- アイドル状態のコネクションが切断されるのを防ぐ
- ファイアウォールやロードバランサーのタイムアウトを回避
コネクションプールの基本動作
release()でPoolに返却されたコネクションは確立されたままPool内で保持される- すぐに再利用可能(新規接続のコストがかからない)
- これはPoolの基本動作であり、
enableKeepAliveとは無関係
enableKeepAliveの役割
- Pool内のアイドルコネクションを長生きさせる
- MySQL側の
wait_timeoutによる切断を防ぐ - ファイアウォール等のタイムアウトを回避
コネクションが切断されるタイミング
idleTimeoutを超えてアイドル状態が続いた場合- Poolが明示的に
end()された場合 - MySQL側が
wait_timeoutで切断した場合(Keep-Alive未設定時)