6

約 150 のリクエストを受け入れるように PgPool を構成しようとしています。Postgres サーバーは 100 接続のみを受け入れるように構成されています。100 を超えるものは PgPool でプールする必要があります。私はそれを理解していないようです。要求をキューに入れるために PgPool のみが必要ですが、現在の構成ではそれが行われません。JMeter テストから、100 を超える接続を取得しようとすると、postgres で PSQL エラー: というエラーが表示されますsorry, too many clients

次のパラメーターを使用して PGPool のみを構成しました。

listen_address = 'localhost'
port = 9999
backend_hostname0 = 'localhost'
backend_port0 = 5432
num_init_children = 100
max_pool = 4
child_life_time =120
child_max_connections = 0
connections_life_tome = 120
client_idle_limit = 0

追加の接続リクエストをキューに入れるために PgPool のみが必要なため、上記の構成は正しいですか? 適切な構成についてアドバイスをお願いします。

4

2 に答える 2

5

pgpool の「child_max_connections」は、DB への最大許容接続数ではありません。これは、プールされた接続が終了して再起動するまでに使用できる回数です。接続スレッドをリサイクルし、メモリリークを止めるためにあります。

max_pool x num_init_children の式は、pgpool が Postgresql に対して行う接続の最大数を表します。明らかに、これは postgresql で設定された「max_connections」よりも小さくする必要があります。そうしないと、pgpool は DB を利用できないバックエンドとしてマークします。また、管理者用に予約された DB 接続がある場合は、pgpool 接続の数をさらに減らす必要があります。

つまり、数式の「max_connections」は、postgresql.conf で設定されたパラメーターです。上記のコメントで 'child_max_connections' を 100 に設定することは、pgpool 接続が 100 回使用されるたびに閉じられ、再度開かれることを意味します。

于 2013-07-22T12:07:36.860 に答える
2

最初に、最大プールサイズとして何が必要かを判断します。PostgreSQLのパフォーマンス(スループットとレイテンシーの両方の観点から)は、通常、アクティブな接続の最大数がおよそ((2 *コア数)+実効スピンドル数)の場合に最高になります。有効なスピンドル数を計算するのは難しい場合があります。たとえば、アクティブなデータセットが完全にキャッシュされている場合は、ゼロとして数えます。この計算のコアとして、ハイパースレッディングからの余分なスレッドをカウントしないでください。また、ネットワーク遅延の問題により、その接続数をアクティブに保つために、計算された数よりもわずかに大きいプールが必要になる場合があることにも注意してください。ハードウェアとワークロードのスイートスポットを見つけるために、いくつかのベンチマークを実行する必要がある場合があります。

調整する必要のある設定はchild_max_connectionsnum_init_children以下に保たれています。

于 2012-04-28T19:05:31.143 に答える