2

最近、postgres で接続スロットが不足するという問題が発生しており、多くのデバッグと肩をすくめた後、接続プールが間違っていることを理解しているという事実にほぼ突き止めました。

Rails、Postgres、Unicorn、および Delayed Job を使用しています。接続プールはプロセス固有である、つまり、各プロセスにはプール内のデータベースへの独自の 10 (接続プール制限) の接続があると仮定するのは正しいですか?

また、アプリのどこにもスレッドがない場合、ほとんどの場合、各プロセスが 1 つの接続を使用すると想定するのは正しいでしょうか?

これらの仮定に基づいて、プロセス数まで追跡しました

Web サーバー - 4x ユニコーン
遅延ジョブ 3x サーバー - 30 プロセス = 90 接続

これは 94 の接続であり、rails:consoles の接続が 2 つ、rails runnerまたはrakeタスクが 2 つあることで、しばしば制限に達していた理由が説明できますよね? rubyスクリプトをスクリプトに変換した後、今週は特に頻繁に発生しましたrails runner

これを緩和するために最大値を 100 から 200 または 250 に増やす予定ですが、レールでプロセス間接続プーリングを実装する簡単な方法はありますか?

4

1 に答える 1

2

おそらくpgbouncerを見てみたいと思うでしょう。これは、専用の PostgreSQL 接続プーラーです。wikiにもいくつか注意書きがあります。ほとんどの Linux ディストリビューションにもパッケージ化されています。

于 2013-11-12T09:11:32.210 に答える