it.xnews.jp
出典: ClickHouse 原文公開: 2026-07-01 生成: 2026-07-11 読了 約 3 分 model: claude-haiku-4-5 原文: https://clickhouse.com/blog/pgbouncer-clickhouse-managed-postgres raw.md

ClickHouse Managed Postgres、PgBouncer を複数プロセスで高速化

ClickHouse Managed Postgres は、PgBouncer の複数プロセス構成を導入し、マルチコア環境での性能を約4倍向上させた。単一プロセスの構成では CPU が低効率に使用されていたのに対し、fleet 構成により複数コアを有効活用し、スループットを大幅に改善している。

ClickHouse Managed Postgres では、PgBouncer の単一プロセスの制限を克服するため、利用可能な CPU コア数に応じた複数プロセスの fleet を運用している。PgBouncer はシングルスレッド設計であり、単一プロセスはマシンのコア数にかかわらず 1 コアのみを使用する。16 vCPU の AWS EC2 c7i.4xlarge インスタンスでテストを実施したところ、単一プロセス構成では約 87k transactions/sec でピークを迎え、256 クライアント接続時には 77k に低下するのに対し、fleet 構成は約 336k transactions/sec に到達し、約 4 倍のスループット向上を達成している。

PgBouncer単一プロセスのCPU利用率

Fleet 構成の実装方法

fleet 構成は、複数の PgBouncer プロセスが同一ポートにバインドし、so_reuseport を有効化することで実現される。カーネルが受信接続を各プロセスに負荷分散する。Postgres キャンセルリクエストは新規接続で送信されるため、so_reuseport により異なるプロセスにハンドオフされる可能性がある。この問題を解決するため、プロセス間の peering メカニズムにより、各プロセスが相互に認識し、キャンセルリクエストを正しいプロセスに転送する。プーリングは transaction モードで動作し、max_client_conn および max_db_connections はプロセス数で分割される。

パフォーマンス改善

単一プロセス構成では、負荷時に PgBouncer プロセスが約 97% の CPU 使用率に達しながら、16 vCPU マシン全体では 10% 未満の利用にとどまっていた。fleet 構成では約 8 コアがアクティブに働く。256 クライアント接続の安定状態テストでは、単一プロセス構成のマシンが約 9% CPU で動作する一方、fleet 構成は約 52% CPU を使用する。CloudWatch メトリクスでは、単一プロセスインスタンスが約 16% の CPUUtilization 平均を記録したのに対し、fleet インスタンスは約 60% に達している。

複数プロセスfleeitとCPU利用率の分布

仕様と デフォルト設定

単一プロセスは max_client_conn を独自に強制し、制限を超過すると 「FATAL: no more connections allowed (max_client_conn)」 エラーを返す。ClickHouse Managed Postgres の全サーバーには、デフォルトでこの fleet 構成が搭載されている。

この記事は元記事の事実のみに基づいて自動生成されました。

出典

ClickHouse『How we scale PgBouncer in ClickHouse Managed Postgres』https://clickhouse.com/blog/pgbouncer-clickhouse-managed-postgres (pgbench の報道による)

この記事をシェア