ApsaraDB RDS for PostgreSQL インスタンスで短期間の接続が多数確立される場合、または接続を頻繁に確立またはクローズする必要がある場合は、インスタンスの接続プーリング機能を有効にすることをお勧めします。この機能は、頻繁な接続の確立とクローズがインスタンスのパフォーマンスに及ぼす影響を軽減します。また、データベースサーバーの負荷とリソース使用量を管理するのにも役立ちます。
背景情報
PgBouncer は、PostgreSQL データベース用のオープンソースのデータベース接続プールです。PgBouncer はアプリケーションとデータベースの間に位置し、データベース接続を管理し、接続プーリング関連の機能を提供します。
PgBouncer は、データベース接続のパフォーマンスとリソース使用量を最適化するために使用されます。アプリケーションが PostgreSQL データベースに接続する必要がある場合、PgBouncer は接続プール内の既存のデータベース接続を再利用できます。これにより、頻繁な接続の確立とクローズによるパフォーマンスオーバーヘッドを防ぎます。接続の再利用メカニズムは、データベースサーバーの負荷を大幅に軽減し、アプリケーションの応答速度と同時実行パフォーマンスを向上させます。
シナリオ
この機能は、短期間の接続が多数存在し、接続が頻繁に確立およびクローズされるシナリオに適しています。
PgBouncer は、クライアント接続の最大数と接続の最大アイドル時間を制限できます。これにより、悪意のある接続や不当な接続が過剰なシステムリソースを消費するのを防ぎ、データベースサーバーの負荷とリソース使用量の管理に役立ちます。
前提条件
RDS インスタンスは次の要件を満たしている必要があります。
RDS インスタンスは PostgreSQL 11 以降を実行している。
RDS インスタンスは 20230530 以降のマイナーエンジンバージョンを実行している。
説明マイナーエンジンバージョンの表示または更新方法の詳細については、「マイナーエンジンバージョンのアップグレード」をご参照ください。
Babelfish が有効になっている RDS インスタンスでは、PgBouncer を有効にすることはできません。
サーバーレス RDS インスタンスでは、PgBouncer を有効にすることはできません。
RDS Cluster Edition を実行している RDS インスタンスでは、PgBouncer を有効にすることはできません。
影響
RDS インスタンスで PgBouncer が有効になっている場合、システムは自動的にポート 6432 を RDS インスタンスに割り当てます。ポート 6432 はポート 5432 と競合せず、ポート 5432 を介して確立された RDS インスタンスへの接続には影響しません。
PgBouncer を有効にする前または後にサーバー側またはクライアント側の SSL 暗号化を有効にした場合、サーバー側またはクライアント側の SSL 暗号化も PgBouncer で有効になります。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] をクリックします。
オプション。データベース接続6432エンドポイントの変更エンドポイントの変更 ページで PgBouncer ポートを表示します。デフォルトポートは です。 をクリックできます。 ダイアログボックスで、エンドポイントタイプを選択し、PgBouncer ポートを変更します。
接続プールを使用して RDS インスタンスに接続する
PgBouncer を有効にした後、接続プールを使用して RDS インスタンスに接続する場合は、接続ポートを PgBouncer ポートに変更します。デフォルトの PgBouncer ポートは 6432 です。RDS インスタンスへの接続方法の詳細については、「ApsaraDB RDS for PostgreSQL インスタンスに接続する」をご参照ください。
接続プール関連パラメータの変更
PgBouncer を有効にした後、[パラメーター] ページに移動して、PgBouncer 関連のパラメーターを変更できます。たとえば、クライアント接続の最大数を調整できます。RDS インスタンスのパラメーターを変更する方法の詳細については、「ApsaraDB RDS for PostgreSQL インスタンスのパラメーターを変更する」をご参照ください。
また、[システム パラメーター テンプレート] タブで PostgreSQL_PgBouncer_Default パラメーター テンプレート (rpg-sys-pgsql-pgbouncer) テンプレートを表示して、PgBouncer 関連のパラメーターの詳細を確認することもできます。詳細については、「パラメーター テンプレートを使用して ApsaraDB RDS for PostgreSQL インスタンスのパラメーターを設定する」をご参照ください。
PgBouncer を有効にした後、パラメーターパラメーター ページに移動して、PgBouncer 関連パラメータを表示および変更できます。PgBouncer を無効にすると、PgBouncer 関連パラメータは ページに表示されなくなります。
パラメータテンプレートを使用して一度に複数のパラメータを変更する場合は、PgBouncer を有効にしてから、パラメータテンプレートを RDS インスタンスに適用する必要があります。
デフォルトでは、接続の最大アイドル時間は 10 分です。この値を変更することはできません。
次の表に、変更可能なパラメータを示します。
パラメータ | タイプ | デフォルト | 説明 |
pgbouncer.pool_mode | string | transaction | 接続をいつ再利用するかを指定する接続プールモード。
|
pgbouncer.default_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 |