最近、postgres で接続スロットが不足するという問題が発生しており、多くのデバッグと肩をすくめた後、接続プールが間違っていることを理解しているという事実にほぼ突き止めました。
Rails、Postgres、Unicorn、および Delayed Job を使用しています。接続プールはプロセス固有である、つまり、各プロセスにはプール内のデータベースへの独自の 10 (接続プール制限) の接続があると仮定するのは正しいですか?
また、アプリのどこにもスレッドがない場合、ほとんどの場合、各プロセスが 1 つの接続を使用すると想定するのは正しいでしょうか?
これらの仮定に基づいて、プロセス数まで追跡しました
Web サーバー - 4x ユニコーン
遅延ジョブ 3x サーバー - 30 プロセス = 90 接続
これは 94 の接続であり、rails:console
s の接続が 2 つ、rails runner
またはrake
タスクが 2 つあることで、しばしば制限に達していた理由が説明できますよね? ruby
スクリプトをスクリプトに変換した後、今週は特に頻繁に発生しましたrails runner
。
これを緩和するために最大値を 100 から 200 または 250 に増やす予定ですが、レールでプロセス間接続プーリングを実装する簡単な方法はありますか?