私は一種の「偶然の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)?
ありがとう
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を決定する方法"最高です
ほとんどの人と同じように、プールサイズを高く設定しています。 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