ApsaraDB RDS for PostgreSQLインスタンスで多数の短期間の接続が確立されている場合、または接続を頻繁に確立または終了する必要がある場合は、インスタンスの接続プール機能を有効にすることを推奨します。 この機能により、頻繁な接続の確立とインスタンスのパフォーマンスの終了による影響が軽減されます。 この機能は、データベースサーバーの負荷とリソース使用量の管理にも役立ちます。
背景情報
PgBouncerは、PostgreSQLデータベース用のオープンソースデータベース接続プーラーです。 PgBouncerは、アプリケーションとデータベースの間に配置され、データベース接続を管理し、接続プール関連の機能を提供します。
PgBouncerは、データベース接続のパフォーマンスとリソース使用量を最適化するために使用されます。 アプリケーションがPostgreSQLデータベースに接続する必要がある場合、PgBouncerは接続プール内の既存のデータベース接続を再利用できます。 これは、頻繁な接続確立および閉鎖によって引き起こされる性能オーバーヘッドを防ぐ。 接続再利用メカニズムにより、データベースサーバーの負荷が大幅に軽減され、アプリケーションの応答速度と同時実行パフォーマンスが向上します。
シナリオ
この機能は、多数の短期間の接続が存在し、接続が頻繁に確立および閉鎖されるシナリオに適しています。
PgBouncerは、クライアント接続の最大数と接続の最大アイドル時間を制限できます。 これにより、悪意のある接続や不当な接続が過度に多くのシステムリソースを消費するのを防ぎ、データベースサーバーの負荷とリソース使用量を管理するのに役立ちます。
前提条件
RDSインスタンスは次の要件を満たしています。
RDSインスタンスはPostgreSQL 11以降を実行します。
RDSインスタンスは、20230530以降のマイナーエンジンバージョンを実行します。
説明マイナーエンジンバージョンを表示または更新する方法の詳細については、「マイナーエンジンバージョンのアップグレード」をご参照ください。
Babelfishが有効になっているRDSインスタンスに対してPgBouncerを有効にすることはできません。
サーバーレスRDSインスタンスでPgBouncerを有効にすることはできません。
影響
RDSインスタンスに対してPgBouncerが有効になっている場合、システムは自動的にポート6432をRDSインスタンスに割り当てます。 ポート6432はポート5432と競合せず、ポート5432を介して確立されたRDSインスタンスへの接続には影響しません。
PgBouncerを有効にする前または後にサーバー側またはクライアント側のSSL暗号化を有効にすると、PgBouncerに対してサーバー側またはクライアント側のSSL暗号化も有効になります。 PgBouncerは、アクセス制御リスト (ACL) がverify-caまたはverify-fullに設定されている接続を検証しません。 また、クライアント証明書の有効期限が切れる前のクライアント証明書失効リスト (CRL) ファイルもサポートしていません。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
使用上の注意
PgBouncerを無効にすると、PgBouncerポートを使用してRDSインスタンスに接続できなくなります。 この場合、アプリケーション設定で接続ポートをRDSインスタンスの元の接続ポートに変更する必要があります。 RDSインスタンスのデフォルトの接続ポートは5432です。
PgBouncerは特定のシナリオには適していません。 たとえば、複雑なトランザクションが存在する場合、データベース接続ステータスをトレースする必要がある場合、または特定のPostgreSQL機能が必要な場合は、データベースに直接接続できます。
課金ルール
接続プーリング機能は無料で提供されます。
手順
RDSインスタンスの接続プール機能の有効化または無効化
- [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDSインスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションペインで、データベース接続 を選択します。
[PgBouncerの有効化] または [PgBouncerの無効化] をクリックします。
表示されるダイアログボックスで [OK] をクリックします。
オプションです。 データベース接続ページでPgBouncerポートを表示します。 デフォルトのポートは6432です。 [エンドポイントの変更] をクリックします。 [エンドポイントの変更] ダイアログボックスで、エンドポイントタイプを選択し、PgBouncerポートを変更します。
接続プールを使用したRDSインスタンスへの接続
PgBouncerを有効にした後、接続プールを使用してRDSインスタンスに接続する場合は、接続ポートをPgBouncerポートに変更します。 デフォルトのPgBouncerポートは6432です。 RDSインスタンスへの接続方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスへの接続」をご参照ください。
接続プール関連のパラメーターの変更
PgBouncerを有効にすると、[パラメーター] ページに移動してPgBouncer関連のパラメーターを変更できます。 たとえば、クライアント接続の最大数を調整できます。 RDSインスタンスのパラメーターを変更する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。
pgbouncer関連のパラメーターの詳細については、[システムパラメータテンプレート] タブでPostgreSQL_PgBouncer_Default Parameter Template (rpg-sys-pgsql-PgBouncer) テンプレートを表示することもできます。 詳細については、「パラメータテンプレートを使用してApsaraDB RDS For PostgreSQLインスタンスのパラメータを設定する」をご参照ください。
PgBouncerを有効にすると、[パラメーター] ページに移動して、PgBouncer関連のパラメーターを表示および変更できます。 PgBouncerを無効にすると、PgBouncer関連のパラメーターは [パラメーター] ページに表示されなくなります。
パラメーターテンプレートを使用して一度に複数のパラメーターを変更する場合は、PgBouncerを有効にしてから、パラメーターテンプレートをRDSインスタンスに適用する必要があります。
デフォルトでは、接続の最大アイドル時間は10分です。 値は変更できません。
次の表に、変更可能なパラメーターを示します。
パラメーター | データ型 | デフォルト | 説明 |
pgbouncer.pool_mode | String | トランザクション | 接続を再利用するタイミングを指定する接続プールモード。
|
pgbouncer.de fault_pool_size | int | 20 | 接続プールで許可されている接続のデフォルト数。 |
pgbouncer.max_client_conn | int | 100 | 接続プールで許可されているクライアント接続の最大数。 |
pgbouncer.min_pool_size | int | 0 | 接続プールで許可されているクライアント接続の最小数。 |
pgbouncer.query_wait_timeout | int | 120 | クエリがサーバーに割り当てられるまでにクライアントが待機できる最大期間。 単位は秒です。 この期間中にクエリがサーバーに割り当てられていない場合、クライアントは接続を閉じます。 値を0に設定すると、このパラメーターは無効になり、クライアントは無期限に待機します。 |
pgbouncer.ignore_startup_parameters | String | "extra_float_digits" | トレースするPgBouncerスタートアップパラメーター。 複数のパラメーターはコンマ (,) で区切ります。 重要 このパラメーターのデフォルト値は "extra_float_digits" です。 パラメーターを変更するときは、このデフォルト値を削除しないことを推奨します。 PostgreSQL JDBCドライバーを使用してRDSインスタンスに接続する場合、このパラメーターには "extra_float_digits" 値が必要です。 |
pgbouncer.stats_users | String | "" | PgBouncer仮想データベースに接続して読み取り専用クエリを実行できるデータベースユーザー。 複数のデータベースユーザーはコンマ (,) で区切ります。 |
上記のパラメーターの詳細については、「PgBouncerドキュメント」をご参照ください。
接続プール関連のメトリックの表示
ApsaraDB RDS for PostgreSQLでは、拡張モニタリング機能を使用してPgBouncer関連のメトリクスを表示できます。 拡張モニタリングの詳細については、「ApsaraDB RDS For PostgreSQLインスタンスの拡張モニタリングメトリクスの表示」をご参照ください。
PgBouncer関連のメトリックを簡単に取得するために、ApsaraDB RDS for PostgreSQLは、PgBouncerを有効にした後、postgresデータベースにpgbouncer_fdwおよびdblink拡張機能を自動的にインストールします。 拡張機能をアンインストールすることはできません。
接続プール機能を有効にした後にのみ、[拡張モニタリング] タブで接続プール関連のメトリックを表示できます。
次の表に、PgBouncer関連のメトリックを示します。
項目 | 定義 |
db.pgbouncer.client_connections.active | クライアント上のアクティブな接続の数。 |
db.pgbouncer.client_connections.waiting | クライアントで待機中の接続数。 |
db.pgbouncer.server_connections.active | サーバー上のアクティブな接続の数。 |
db.pgbouncer.server_connections.idle | サーバー上のアイドル接続の数。 |
db.pgbouncer.total_pooled_connections | 接続プール内の接続の総数。 |
db.pgbouncer.num_pools | 接続プールの数。 |
関連する操作
ModifyDBInstanceConfigを呼び出して、RDSインスタンスのPgBouncerを有効または無効にすることができます。 次の表で、関連パラメーターについて説明します。
パラメーター | 説明 | 例 |
DBInstanceId | PgBouncerを有効または無効にするRDSインスタンスのID。 | pgm-**** |
ConfigName | 設定項目の名前です。 | pgbouncer |
ConfigValue | 設定項目を有効にするかどうかを指定します。
| true |