ActiveRecord の connection_pool のおはなし
TL;DR
config/database.yml
の pool
= Rails 1プロセスあたりのコネクション数
非同期処理
- Sidekiq はマルチスレッド(= Rails プロセスは1つ)のため、
pool
の値がconcurrency
の上限値になる - Delayed Job, Resque はマルチプロセス(= 各プロセスが Rails のプロセスをもっている)のため関係なし
Unicron
before_fork do |server, worker| ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| ActiveRecord::Base.establish_connection end
- Unicorn は worker ごとにコネクションをはってる
before_fork
でコネクションをきる(master プロセスがコネクションをもたないようにするため)after_fork
(= 各 worker)でコネクションをはる- スレッドとか使っていなければ各 worker 1コネクションですむはず