基本的に Rack サーバの Worker 数と同じにするべき。
Puma Web サーバーを使用している場合は、pool 値を同等の ENV['RAILS_MAX_THREADS'] に設定することをお勧めします。複数のプロセスを使用している場合は、各プロセスに独自のプールが含まれるため、ワーカープロセスが ENV['RAILS_MAX_THREADS'] を超えない限りはこの設定で十分です。
heroku くんもこう言っとる。 基本的に default
に当たり障りない値を書いておき (これ今も初期化時に記述されるんでしたっけ)、リモート各種の ENV に個別に記述してあげようね。
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default staging: pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 2 } %> test: <<: *default production: <<: *default pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 6 } %>
RAILS_MAX_THREADS
を設定する効果が、コネクションプール以外で発揮されるのかは、わからないです……。
それでもあふれるタイミングがある
インフラを見ている案件、稀にコネクションプール枯渇のお知らせが来る事が出てきて、今月は片手で数えられるくらいだった。 Thread も Worker も利用していないようなので問題ないと思うんだけどなあ、と思っていたけど、 Faraday で外部のサーバと通信しているかつ、この外部サーバがよく死ぬので、その箇所でなんかスタックして新規接続にコネクション配れないのか? という気がしている。
コネクション is 難しい。