🎉
could not obtain a connection from the pool within 5.000 secondsを解決する
こんにちは。HANOWAで開発をしている寒河江です。
HANOWAはバックエンドにRailsを使っています。ちょうど一年前に、Railsのcache機能をユーザーの詳細ページに実装しました。この実装を行うことで、毎回ユーザーのデータをロードしないようにして、DBアクセスの負荷、接続数の削減、レスポンス速度向上によるUX向上を図りました。しかし、キャッシュを使うことで、過去のデータが更新されないトラブルが発生したりして安全性の問題から、キャッシュ機能を外しました。その時に could not obtain a connection from the pool within 5.000 seconds
というエラーに遭遇したので、その解決方法を共有します。
原因
エラーの内容通り、pool数が足りず、待機時間が発生し、timeoutしていました。
キャッシュ機能を作ったのがちょうど一年前です。その後HANOWAのサービスも急成長し、ユーザーアクセスが増え、RDSの同時接続数も増えてましたが、キャッシュがデータロードの頻度を減らしてくれていました。成長した後に、いきなりキャッシュを外したことで、could not obtain a connection from the pool within 5.000 seconds
が発生したものと思われます。
解決策
railsのdatabase.ymlのpool数を10から20に増やしました。
database.yml
default: &default
...
- pool: 10
+ pool: 20
その後
pool数をあげるので、RDSヘの接続数が増えました。
RDSのクラスの最大接続数を確認して、poolの調整をしてみてください。
HANOWAで開発したい人へ
開発者募集中です!
Discussion