web-dev-qa-db-ja.com

PgBouncerでserver_lifetimeを使用する意味は何ですか?

PgBouncer設定でserver_lifetimeオプションを見つけましたが、私たちのケースで本当に必要かどうかを理解しようとしています。

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

プーラーは、これより長く接続されているサーバー接続を閉じようとします。 0に設定すると、接続は1回だけ使用され、その後閉じられます。 [秒]

デフォルト:3600.0

接続を閉じたり再開したりする意味は何ですか?

なぜ「試してみる」と書かれているのですか?この操作でPgBouncerが失敗することがありますか?

2
raacer

これはpgBoouncerまたは任意のプーラーソフトウェアのベースです-pgBouncerの主な作業はPostgreSQL接続の再利用です。多数の接続を作成すると、短いセッションの場合、クエリが高速になるため、非常にコストがかかる可能性があります。物理接続をより多くのクライアントで共有(再利用)できる場合は、実行を大幅に高速化できます。

Pgbouncerおよび同様のソフトウェアの2番目の重要な役割は、過負荷に対する保護です。 PostgreSQLには内部プールがありません。接続されたユーザーは、SQLを実行できます。アイドル接続が長いアプリケーションがたくさんあります。これらのアプリケーションには高いMAX_CONNECTION番号。非表示の想定は、これらの接続でのアクティビティが少ないことです。ただし、アクティビティが非常に多い場合や、新しい接続でのリクエストが非常に多い場合、データベースが過負荷になる場合があります。 MAX_CONNECTIONは約10 x CPUコアでなければなりません。不十分な値は、データベースを過負荷から保護し、障害によって終了しません。これらのアプリケーションの場合、pgbouncerの安全なソリューションになる可能性があります。このソフトウェアは、多数のクライアントの物理的なアイドル接続を共有できます。

server_lifetime割り当てられたソースをオペレーティングシステムに強制的に返します。一部のソース(メモリなど)は内部で管理されており、オペレーティングシステムに(通常は)新しく返されます。メモリを消費する操作の中には、大量のメモリを必要とするものがあります。初めてこのメモリはシステムから割り当てられます。次回、このメモリはPostgreSQLによってのみ管理されます-はるかに安価で高速です。しかし、時にはそれも効果がない場合があります。 pgbouncerは、どのプロセスがメモリを事前割り当てしたかについての情報を持っていません-そして、時にはメモリをよりよく使うことができます。安全策はserver_lifetime。 1時間は控えめな値です-短くすることもできます-10分。 pgbouncerはアクティブな接続ではなく閉じるだけなので、接続がクライアントによって使用されている場合:開かれたトランザクション、長いアクティブなコマンド、.. server_lifetimeは適用できません。

3
Pavel Stehule