試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。私は、LGTM画像を簡単に作成できるサービス「LGTMoon」を公開しています。lgtmoon.herokuapp.comこのアプリケーションはHeroku上で動いています。PostgreSQLを使っています。PostgreSQLなんですが、接続できるコネクション数が20に制限されています。*1たまにこのコネクション制限に引っかかり、画像が表示されないなどの問題が起こることがありました。そもそも、コネクション数が20と制限されているのであれば、それに合わせてアプリ側でコネクションプールを張ったほうがいいんじゃないかと思いました。簡単に設定できると思ったのですが、意外にはまったのでまとめておきます。なくただのSlickです)コネクションプールとは通常アプリケーションからDBに接続する場合はAPIにリクエストが来るコネクションを確立させてクエリを流して結果を取得コネクションを切るという手順を踏みます。ここで今回問題になるのが、コネクションが20個埋まっている場合は、1の「コネクション確立」で失敗になってしまい、エラーになってしまう点です。コネクションプールを利用するとアプリ起動時にあらかじめコネクションを20個つくっておくAPIリクエストが来る空いてるコネクションを探すクエリを流して結果を取得という手順になります。アプリ起動時にコネクションを20個張ってしまうわけです。各APIリクエスト時にいちいちコネクションを張っておくので、コネクション確立のオーバーヘッドがなくなり、クエリが詰まることが減るだろうという算段です。true}DB接続部分https://github.com/yoshikyoto/lgtmoon/blob/0a9a230d76b54f5f09fa7c5ee7103a4d995e0a58/app/infra/datasource/LgtmoonDatabase.scala#L12Database.forConfig("pg_database")...コネクションプールの利用コネクションプールを利用するには、disabledをenabledに変えるだけではありません。どのライブラリを利用するかを教えてあげるのと、コネクションプール関係の設定をいくつか追加する必要があります。CPというコネクションプールのライブラリを利用します。maximumPoolSizeはその名の通りコネクションの最大数です。PostgreSQLの最大値である20を設定します。同じ値にしたほうがいいとのことなので、後ほど20に変更しようと思っています。minimumIdleはアプリケーションにあまりリクエストが来ていないときのminimumのコネクション数ですが、基本的には常に上限いっぱいまで接続してコネクションの数を固定しておいたほうがパフォーマンスが良いためです。CPライブラリの導入build.sbtに以下を書きます。これだけでコネクションプールの導入は完了です。PostgreSQLのhobby-basicプランです(9ドル/月)。無料のhobby-devプランでも同様20のコネクション制限があります。LGTM画像を簡単に作れるサービスです。(2)月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。