PgBouncerは、PostgreSQL用の軽量接続プールです。
PgBouncer 1.6は、2015年8月1日に発表されました。このブログ投稿では、PgBouncerの主な新しい改善点について説明します。
PgBouncerの主な新機能
postgresデータベースからユーザーパスワードハッシュをロードする
PgBouncerでは、 auth_user の2つの構成パラメーターを使用して、データベースからユーザーのパスワードをロードできるようになりました。 およびauth_query 。
- auth_user
auth_userが設定されている場合、auth_fileで指定されていないユーザーは、auth_userを使用してデータベースのpg_shadowからクエリされます。 Auth_userのパスワードはauth_fileから取得されます。このパラメータはデータベースごとに設定することもできます。 - auth_query
このパラメータを使用すると、データベースからユーザーのパスワードを読み込むSQLクエリを記述できます。 auth_userの下で実行されます。以下のデフォルトのクエリを参照してください:SELECT usename, passwd FROM pg_shadow WHERE usename=$1
プーリングモードは、データベースごととユーザーごとの両方で構成できます
この機能により、メインのプーリングモードとは関係なく、クライアントは以下に説明する3つのプーリングモードのいずれかを使用してさまざまなデータベースに接続できるようになりました。これはユーザーにも当てはまります。たとえば、プーリングモードがセッションプーリングの場合、トランザクションプーリングを使用するように特定のユーザーを構成できます。これにより、データベースレベルとユーザーレベルの柔軟性が得られ、より適切なプーリングオプションを適用できます。
PgBouncerは、3つの接続プールモードを提供します。
- セッションプーリング
クライアント接続の存続期間中、既存のサーバー接続がクライアントに割り当てられ、クライアントが切断された後、割り当てられたサーバー接続は接続プールに戻されます。 - トランザクションプーリング
このモードでは、サーバー接続は接続されたクライアントにすぐには割り当てられませんが、トランザクション中にのみ割り当てられます。トランザクションが終了するとすぐに、接続はプールに戻されます。 - ステートメントプーリング
これはトランザクションプーリングに似ていますが、より積極的です。シングルステートメントクエリが発行されるたびに、バックエンドが割り当てられます。ステートメントが終了すると、接続はプールに戻されます。
データベースごとおよびユーザーごとの接続制限:max_db_connectionsおよびmax_user_connections
この機能により、 max_db_connections という2つの新しいパラメーターを使用して、データベース/ユーザーレベルごとの接続制限も制御できるようになりました。 およびmax_user_connections 。
- max_db_connections
このパラメータでは、データベースごとに指定された接続数を超えることはできません(プール、つまりユーザーに関係なく)。
このパラメータのデフォルト値は無制限です。 - max_user_connections
このパラメータでは、ユーザーごとに指定された接続数を超えることはできません(プール、つまりユーザーに関係なく)。
新しい接続を防ぐためにDISABLE/ENABLEコマンドを追加します
この機能により、PgBouncerには ENABLE / DISABLE db;があります。 新しい接続を防ぐためのコマンド。
- DISABLE db;
このコマンドは、指定されたデータベース上のすべての新しいクライアント接続を拒否します。 - ENABLE db;
このコマンドは、以前の DISABLEの後に新しいクライアント接続を許可します コマンド。
新しい優先DNSバックエンド:c-ares
c-ares は、すべての興味深い機能をサポートする唯一のDNSバックエンドです:更新付きの/ etc / hosts、SOAルックアップ、大規模な応答(TCP / EDNS + UDP経由)、IPv6。現在推奨されているバックエンドであり、おそらくのみ 将来のバックエンド。
構成ファイルには「%includeFILENAME」ディレクティブがあり、構成を複数のファイルに分割できます
この機能により、PgBouncerは他の構成ファイル内に構成ファイルを含めることをサポートします。
つまり、PgBouncer構成ファイルには、読み取りおよび処理する別の構成ファイルを指定するincludeディレクティブを含めることができます。これにより、大きな構成ファイルをより小さく、より管理しやすいファイルに分割できます。 includeディレクティブは次のようになります:
%include filename
ファイル名が絶対パスでない場合は、現在の作業ディレクトリからの相対パスと見なされます。
このバージョンでは、さらに多くの機能がリリースされています。 PgBouncerの変更ログページにアクセスするか、以下のリストでその他の改善点を確認してください。
- SHOW CLIENTS/SERVERSにremote_pidを表示します。 UNIXソケット、およびtcpとUNIXソケットサーバーの両方を介して接続するクライアントで使用できます。 tcp-serverの場合、pidはキャンセルキーから取得されます。
- 負のDNSキャッシングを制御するための個別の構成パラメーター(dns_nxdomain_ttl)を追加します。
- クライアントホストのIPアドレスとポートをapplication_nameに追加します。これは、デフォルトで「オフ」に設定されている構成パラメーターapplication_name_add_hostによって有効になります。
PgBouncerとは何ですか?
PgBouncerは、PostgreSQLデータベースへのクライアント接続を管理するためのユーティリティです。一言で言えば、PostgreSQLサーバーへの接続プールを維持し、それらの既存の接続を再利用します。これは、クライアント接続のオーバーヘッドを減らすのに役立ちますが、データベースサーバーへの開いている接続の最大数を制限することもできます。また、1つ以上のデータベースへの接続を別のデータベースサーバーにリダイレクトするなどのトラフィックシェーピングにも使用できます。これらに加えて、PgBouncerは、ユーザーおよびデータベースレベルでさえセキュリティを管理するために使用できます。
PgBouncerアーキテクチャをより視覚的に示した下の図を参照してください。
この特定の例では、クライアントアプリケーションは別々のPgBouncerインスタンスに接続されており、代わりにPostgreSQLデータベースサーバーに直接接続されています。データベースサーバー「DBServer1」と「DBServer2」は、独立したPostgreSQLインスタンスである場合もあれば、異なる役割(master/replicaやwrite-master/backup-masterなど)を持つクラスターの一部である場合もあります。
各PgBouncerインスタンスは、PostgreSQLサーバーへの多数のオープン接続を備えた接続プールを維持します。例からわかるように、PgBouncersを使用すると、さまざまなデータベースへの接続、さらにはさまざまなデータベースサーバーへの接続を備えたプールを作成できます。
詳細h2>
PgBouncerのメインウェブサイトにアクセスできます:http://pgbouncer.github.io/
すばらしいFAQページがあります:http://pgbouncer.github.io/faq.html
プロジェクトのGithubリポジトリを確認できます:http://github.com/pgbouncer/pgbouncer