動かざることバグの如し

近づきたいよ 君の理想に

ActiveRecordのコネクションプーリングを完全に殺す

環境

コネクションプーリングとは

割愛 以下のサイトが詳しい

やり方

database.ymlにreaping_frequency: nil を追加するだけ

default: &default
  adapter: mysql2
  encoding: utf8mb4
  reaping_frequency: nil
  pool: 10

reaping_frequencyとは

ActiveRecordでは接続して処理が終わっても一定時間は接続しっぱなしになる。その一定時間がreaping_frequency(秒)

実装はactiverecord内のReaperクラスを見るとわかる

# Every +frequency+ seconds, the reaper will call +reap+ and +flush+ on
# +pool+. A reaper instantiated with a zero frequency will never reap
# the connection pool.
#
# Configure the frequency by setting +reaping_frequency+ in your database
# yaml file (default 60 seconds).
class Reaper
  attr_reader :pool, :frequency

  def initialize(pool, frequency)
    @pool      = pool
    @frequency = frequency
  end

  def run
    return unless frequency && frequency > 0
    Thread.new(frequency, pool) { |t, p|
      loop do
        sleep t
        p.reap
        p.flush
      end
    }
  end
end

デフォルトでは60秒。nilの場合はそもそもrunのsleepしないのでプーリングが走らないってわけ