tl;dr
Railsではコネクションプール数を設定していても、1スレッド辺り1コネクションしか持ちません。
発端
アカツキではRails + Unicorn + Nginx + MySQLの構成をAWSで運用しており、c3.4xlarge
のインスタンス上で1台辺り64のUnicornワーカープロセスが実行される設定になっています。
ソーシャルゲームでは時にたくさんのアプリケーションサーバを並列稼働される必要がでてきます。特に年末年始の時期は平時の2-3倍のトラフィックが予想され、アプリケーションサーバを最大100台で稼働させる必要がありました。
Railsのdatabase.ymlのpool設定は5だったので、単純に考えると最大 100台 * 64プロセス * 5接続 = 32,000個の接続が常時貼られるのでは?MySQLのmax_connections
の設定は大丈夫か?という議論があり、Railsのコネクションプールの実装をきちんと理解すべき!ということで、調査しました。