0

負荷分散と接続プールを備えたストリーミングレプリケーションモードで、2つのバックエンドを備えたpgpool 3.2.1をインストールしました。pgpool接続を崩壊させるために、いくつかの高負荷テストを実行しました。

このルールが正しいと仮定すると:max_pool * num_init_children <=(max_connections --superuser_reserved_connections)

テスト1:

num_init_children = 90 max_pool = 1

(マスターのみ)max_connections = 100 superuser_reserved_connections = 3

psql -U postgres -c'SELECT COUNTfrompg_stat_activity'の結果は90でした。

テスト2:

num_init_children = 90 max_pool = 2

(マスターのみ)max_connections = 100 superuser_reserved_connections = 3

psql -U postgres -c'SELECT COUNT from pg_stat_activity'の結果は91でした。他の6つの接続で、最大97の接続を取得するにはどうなりますか?これは、postgresqlに到達できる接続の最大数です。

どちらの場合も、pgpoolAdminで使用されるすべての接続を取得し、データベースへの接続がフリーズし、新しい接続が許可されませんでした。

ありがとうございました!

4

1 に答える 1

1

pgpool では、次のルールを使用して接続を制御しています。

max_pool*num_init_children <= (max_connections - superuser_reserved_connections) (クエリのキャンセルは不要) max_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections) (クエリのキャンセルが必要)

したがって、問題は、クエリをキャンセルする場合、pgpool で構成された 2 倍の接続数を postgresql で設定する必要があることです。

于 2013-03-14T19:44:27.243 に答える