web-dev-qa-db-ja.com

pgbouncerのmax_client_connを決定する方法

私は一種の「偶然のdba」なので、ここで本当の初心者の質問をお詫びします。 pool_mode = transactionモードでpgbouncerを使用しています。昨日、PHPログにエラーが発生し始めました。

これ以上の接続は許可されません(max_client_conn)

Postgresql.confにmax_client_conn = 150と一致するmax_connectionsがありました。

だから私の最初の質問は、pgbouncermax_client_connをpostgresqlmax_connectionsと等しく設定する必要がありますか、それとも私はその関係を完全に誤解していますか?

Pgbouncerの背後にある単一のpostgresインスタンスにデフォルトのdefault_pool_size = 20の20個のデータベースがあります。max_client_connは400にする必要がありますか? (pool_size * number_of_databases)?

ありがとう

7

https://pgbouncer.github.io/config.html

max_client_conn許可されるクライアント接続の最大数。

default_pool_sizeユーザー/データベースのペアごとに許可するサーバー接続の数。

したがって、max_client_connはpostgres max_connectionsよりもはるかに大きい必要があります。そうでない場合は、接続プールを使用するのはなぜですか。

20のデータベースがあり、default_pool_sizeを20に設定すると、pgbouncerがdbへの400の接続を開くことができるようになるため、posgtres.conf max_connectionsを400に調整し、pgbouncer max_client_connを4000のようなsmthに設定する必要があります(実際のデータベース接続ごとにプールに平均10個の接続があります)

この回答は、設定を理解するための例を提供することのみを目的としており、文字通り従うべきステートメントとしてではありません。 (例えば、私はちょうど設定を見ました:

max_client_conn = 10000
default_pool_size = 100
max_db_connections = 100
max_user_connections = 100

2つのデータベースがあり、max_connectionsが100に設定されているクラスターの場合)。ここではロジックが異なります。また、max_db_connectionsが設定されており、実際には接続制限がpgbouncer [データベース]セクションのデータベースごとに個別に設定されています。

だから-小さな設定で遊んで、設定が互いにどのように影響するかを理解してください-これは "pgbouncerのmax_client_connを決定する方法"最高です

10
Vao Tsun

ほとんどの人と同じように、プールサイズを高く設定しています。 postgresqlサーバーに接続プールを行わせないでください。そうすると、パフォーマンスが大幅に低下します。

Postgresqlへの同時接続数の最適設定は

connections = ((core_count * 2) + effective_spindle_count)

つまり、データベースを2コアサーバーで実行している場合、pgbouncerからの合計プールサイズは5以下である必要があります。Pgbouncerはpostgresqlよりもプーリングの処理に優れているため、そうさせてください。

したがって、postgresql.confのmax_connectionsをデフォルトの100のままにします(最大値であるため、変更する理由はありません。また、一部のロギング、管理、およびバックアッププロセスにも接続が必要なため、これはアプリケーションが必要とするものより常に高くする必要があります)

そして、pgbouncer.iniファイルセットで

max_db_connections=5
default_pool_size=5
max_client_conn=400

詳細については https://www.percona.com/blog/2018/06/27/scaling-postgresql-with-pgbouncer-you-may-need-a-connection-pooler-sooner-than-you -expect /

3
Christoffer