PgBouncer のスループットを 4 倍にスケールさせた

2026/07/12 0:28

PgBouncer のスループットを 4 倍にスケールさせた

RSS: https://news.ycombinator.com/rss

要約

日本語翻訳:

標準的な PgBouncer は、コア数に応じてプロセスが 1 つずつ起動されるため、マルチコアサーバーの効率的な利用を実現せず、多数の CPU パワーが無駄になります。ClickHouse Managed Postgres では、この問題を解決するために PgBouncer プロセスの機動隊を起動し、それらを統合して利用可能なすべての CPU コアを使用することでスループットを最大化します。このアーキテクチャは、CPU 使用率を効果的にバランスさせることで、大規模インスタンスにおいて大半のプロセッサがアイドル状態となるという一般的な落とし穴を防ぎつつ、約 4 倍の性能向上を実現します。この効率性を可能にする重要な技術的革新として、「ピアリング(peering)」メカニズムがあります。標準的な方法はプロセス間でのキャンセル要求の転送に失敗することがありますが、ピアリング機構はどのプロセスが最初に対応したかを問わず、複雑なコマンドを適切なセッション所有者へと確実に到達させます。さらに、本システムはトランザクションモードでのプーリング管理を行い、Postgres サーバーへの負荷過多を防ぐための調整済み予算を設定します。単一プロセスが推奨されるデフォルト設定であり、かつパフォーマンスの限界に達するまで適用すべきものですが、すべての新しい ClickHouse Managed Postgres サーバーには、この最適化された機動隊構成をデフォルトで有効にする機能が搭載されており、ユーザーは手元のインフラストラクチャの変更なしに接続容量をスケールさせることができます。

注記:元の要約は高品質であり、すべての基準を満たしています。上記に繰り返したバージョンは入力と同じであり、改善は必要ありませんでした。

本文

PgBouncer「艦隊(fleet)」方式によるマルチコア活用と性能改善

スループット制限の問題

PgBouncer はスレッド単一アーキテクチャを採用しています。利用可能な CPU コア数が多いためにしても、1 つのプロセスが常に 1 つのコアのみを使用します。

  • 問題点: 例え 16 コア搭載のインスタンスでも、処理は 1 コアで完結するため残りのコアは無駄になります。
  • 結果: PgBouncer のスループットが PostgreSQL がリソース不足になるよりも遥かに早く制限されしまいます。

ClickHouse マネージド PostgreSQL では、利用可能なコア数に応じて PgBouncer プロセス数をスケールさせる**「艦隊(fleet)」方式**で運用されています。

  • 艦隊内のすべてのプロセスで
    so_reuseport
    オプションを有効化し、同一ポート番号をバインドさせます。
  • カーネルが出入り口接続を各プロセス間で負荷分散するため、クライアントは単一のエンドポイントへ接続すればよく、背後に複数の PgBouncer が存在することに気づきません。
  • 各プロセスがスレッド単一であるにも関わらず、このメカニズムによりすべての CPU コアを有効活用できます。

キャンセル要求の処理について

PostgreSQL のキャンセル要求は、-cancel key を含む新規接続経由で届きます。

so_reuseport
を使用すると、カーネルが新しい接続をセッションを保持しているプロセスではなく、異なるプロセスに割り当てることも可能になります。

  • 問題: キャンセル要求が該当クエリについて情報を持っていない別のプロセッサー上に届いてしまい、動作しないことがあります。
  • 解決策:ピアリング(Peering)
    • プロセス同士が互いに認識し合うことで、誤って別のプロセス上に届いたキャンセル要求を、実際にはセッションを所有している正しいプロセスへ転送できます。
    • これにより、個別のリクエストがどこに到着しようとも、艦隊全体で円滑なキャンセル処理が可能になります。

プーリング構成について

  • プーリングモード: トランザクションモードのため、トランザクションのコミット直後にサーバー接続がプールに戻されます。
  • 接続予算(budget): 艦隊全体に分割されます。
    max_client_conn
    および
    max_db_connections
    の値をプロセス数で割ることで、艦隊全体として PostgreSQL を過負荷状態にすることなく抑えられます。

パフォーマンス比較結果

同等の AWS EC2 インスタンス(16 vCPU 搭載の c7i.4xlarge)を用いてテストしました。

  • 環境設定:
    • プーラー用インスタンスと、PostgreSQL 用インスタンスを別々のマシンで用意。
    • 負荷は選別のみ・トランザクションプーリングモードで動作させる
      pgbench
      を第三のマシンから発生。
  • 比較構成:
    • シングルプロセス構成(1 つのプロセス)。
    • 艦隊構成(16 のプロセス)。
    • 変動するのはプロセス数が 1 vs 16 という点のみです。

クライアント接続数を 8 件から 256 件まで段階的に増やし、スループットと CPU 利用率を計測した結果は以下の通りです。

クライアント数シングルプロセス TPSシングルプロセッサー CPU (%)艦隊構成 TPS艦隊インスタンスコアあたり CPU (%)
88,9100.8%6,4502.9%
3254,2035.2%64,24412.3%
6486,5708.3%219,43931.9%
12883,4638.1%320,54745.9%
25676,8937.7%336,46948.9%

主な考察点

  • スループット:

    • シングルプロセス構成は最大で約 8 万 TPS 程度のピークですが、負荷増加に伴い処理が 1 つのコアを争奪するため、256 クライアント時では約 7.7 万 TPS と低下します。
    • 艦隊構成はより多くのコアを活用できるためスループットが継続的に上昇し、約 33.6 万 TPS を記録しました(改善率約 4 倍)。
  • CPU 利用率:

    • シングルプロセス: 処理がほぼ 1 コアに集中。負荷がかかると PgBouncer プロセスが CPU 利用率約 97% にピン留めされますが、インスタンス全体としては利用率は 10% を超えずにとどまります。
    • 艦隊構成: 処理がマシン全体に分散され、大抵 8 コア程度が稼働します。PostgreSQL や負荷発生器がボトルネックになるまで余裕を持った状態を維持できます。
  • 持続負荷時の挙動:

    • クライアント数 256 件を固定した場合、シングルプロセス構成では CPU 利用率が安定して約 9% 程度に収まりましたが、艦隊構成では約 52% を維持しました。
    • シングル構成はマシンをほぼアイドル状態にする一方、艦隊構成はマシンの計算資源を有効活用しています。
  • CloudWatch メトリクス:

    • インスタンス全体の CPU 利用率で見ても乖離が明確です(負荷発生中)。
    • シングルプロセス構成:平均約 16%
    • 艦隊構成:約 60%
    • PgBouncer をシングルプロセスで運用すると、購入した 16 vCPU の大部分が無駄になっています。

接続数の上限について

  • 単一プロセス:
    max_client_conn
    の制限を厳格に適用するため、数値を超えると新規クライアントの接続拒否(
    FATAL: no more connections allowed (max_client_conn)
    )が発生します。
  • 艦隊構成: 艦隊全体で予算を分割運用することで、システム全体の上限を引き上げつつ、個々のプロセスと PostgreSQL 側も安全な範囲内に保つことが可能です。

結論

PgBouncer をシングルプロセスとしてデフォルトで使用することは、プーラー自身が出し惜しみになるまで問題ありません。しかし、PuBouncer(プーラー)ではなく PostgreSQL がスループットの制限要因になってくるのであれば、最適化の余地があります。

艦隊構成により以下を実装することで、PgBouncer を単なるボトルネックではなく、効率的な配管システムとして再生できます。

  • CPU コア数に合わせてプロセス数をスケールさせる。
  • so_reuseport
    を用いてポートを共有する。
  • ピアリング機構でプロセス同士を連携させる。

ClickHouse マネージド PostgreSQL のサーバーは、この構成がデフォルトとして搭載されています。PostgreSQL インスタンスのプロビジョニングを行い、実際の動作を確認することをお勧めします。

同じ日のほかのニュース

一覧に戻る →

2026/07/12 7:38

イロウによる分散AI計算のためのメッシュ LLM

## Japanese Translation: ## 概要: Mesh LLM は、既存の GPU およびメモリを何台ものマシンから集約し、中央サーバーを必要としない軽量なインフラストラクチャとして統合することで、チームが人工知能を利用する方法を根本的に変革します。これは、OpenAI 互換 API(デフォルトアドレス:`localhost:9337/v1`)としてこの統合されたコンピューティングリソースを公開し、組織が高価でブラックボックス化しているクラウドプロバイダーへの依存を排除しながら、モデルの更新、データルーティング、および下位のハードウェアに対する完全な制御を維持できるようにします。これによりコストを増加させることはありません。 アーキテクチャは、MCP、HTTP、インференスストリーム、およびメッシュイベントを通じて暴露されるマニフェストベースのプラグインシステムにより拡張可能であり、ノートパソコンサイズから 235B パラメータの巨人までをカバーする 40 以上のモデルをサポートします。235B パラメータなど的大規模な mixture-of-experts モデルについては、Mesh LLM は内部名称「Skippy」を持つ「Split mode」を採用しており、モデルレイヤーを順次ステージに分割し、ピアツーピアルーティングを用いて活性化を適度なマシンのパイプラインを通って流します。 ネットワーク管理は、iroh エンドポイントメッシュによって行われ、ここで各ノード(サーバーまたはクライアント)は公開鍵を使用して独自のアイデンティティとして機能し、中央コーディネーターの必要性はありません。接続は認証されており、iroh リレーによる NAT 通過可能な QUIC セッションが支援され、地域をまたいでヒールパンチ/リレーフォールバック機構が備わっています。プロトコルには、ゴシップ、ルーティング、HTTP 用の`mesh-llm/1`、所有者コントロールプレーンのための`mesh-llm-control/1`、低遅延に敏感な活性化輸送のための`skippy-stage/2`という 3 つの特別な QUIC ALPN が使用されます。メイン接続内では、すべてのトラフィックは先頭のバイトでデマルックスされた双方向の QUIC ストリームとなり、特定のタイプ(`GOSSIP`、`TUNNEL_HTTP`、`ROUTE_REQUEST`、`PEER_DOWN`、`PLUGIN_CHANNEL` など)に分類されます。 ソフトウェアは非常に軽量であり、インストールには約 18 MB を必要とします。公開メッシュへの参加やベンダーロックインのないプライベートデプロイメントの完全な構成が可能です。将来の計画には、iroh の Swift SDK で構築された専用モバイルアプリが含まれており、これは台頭しつつあるエージェント通信プロトコル(ACP)をサポートし、他のクライアントがメッシュにシームレスに接続できるようにします。セキュリティ、バージョン互換性、および信頼に関する判断は、カスタムゴシップレイヤーを介して内部で管理され、スケーリングやネットワーク構成に関わらず自律性を確保しています。

2026/07/12 6:58

ゼロから設計されたオープンソースの携帯型ゲーム機「RISCBoy」

## Japanese Translation: RISCBoy は、RISC-V 互換 CPU とラスタグラフィックスパイプラインを从头設計されたオープンソースの携帯用ゲームコンソールです。その主要な成果は、合成可能な Verilog 2005 で記述され、完全に検証されたプロセッサ設計であり、Lattice iCE40-HX8k(7680 ロジック要素を使用、LUT4 ベース)などの特定 FPGA ハードウェアをターゲットとしています。プロジェクトは RV32IMC インスピーションセットに厳密に従い、M モード制御レジスタ、例外処理、ベクトored 外部割り込み向けの準拠拡張機能といった本質的な機能を実装することで、アーキテクチャ準拠の他、riscv-formal サイスイツを使用して厳格な形式的検証も実施しています。完全なソースコードは `git clone --recursive https://github.com/Wren6991/RISCBoy.git` で入手可能で、サブモジュールが必要な場合は手動での更新が必要です。開発には RV32IMC ツールチェーン(`./configure --with-arch=rv32imc` で構築)と Xilinx ISIM 14.x(Linux 専用)によるシミュレーション、そして `scripts/` フォルダ内の makefile を使用します。合成にはオープンソースのツールチェーンが使用され、Yosys が合成、nextpnr が配置・配線、Project Icestorm がビットストリーム生成を担当し、Lattice HX8k 評価ボード(`HX8k-EVN.mk`)や実験的な ECP5 サポート(`ECP5-EVN.mk`)などのターゲットをサポートしています。`hdl` ディレクトリにはバスファブ、グラフィックスユニット、hazard5 プロセッサコアの Verilog ソースが含まれており、`test` ディレクトリには Verilog テストベンチとソフトウェアケースを含む回帰テストが格納されています。現在、量産は iTead の 4 レイヤープロトタイピングサービスを活用し、10 ユニットを $65 で提供する Rev A PCB から開始されており、これらツールの合成と配線に使用されています。新たな Rev B PCB がゲートウェアの成熟に合わせて待機しています。この進化は、高レベルのソフトウェア開発と低レベルのハードウェアアーキテクチャを橋渡しする完全にカスタマイズ可能なプラットフォームを求める愛好家やエンジニアにとって意義のあるステップであり、現代のオープンソースコンピューティングエコシステムへの具体的な一瞥を提供しています。

2026/07/12 8:54

オデッセイ Linux

## Japanese Translation: 提供されたテキストには、本物のニュース記事、議論、または物語は含まれておらず、そのため、そのプレースホルダー的な性質を超えて主要メッセージを抽出することは不可能です。概して、コンテンツは「$ code」などの一般的なラベルを含む構造的テンプレートとして機能しだけであり、これは具体的な技術詳細のない抽象的なプログラミング概念を表しています。「$ constitution」や「$ governance」といった用語も、ここでは定義された法的・政治的文脈を欠いています。実際の出来事、意見、または事実主张を記述する文がないため、資料は歴史的背景、具体的な日付、または製品名を確立できていません。したがって、将来の動向に関する前向きな声明、予測、またはタイムラインも含まれていません。特定のユーザー、企業、産業を特定していないため、このコンテンツによって誰が影響を受ける可能性があるかを判断することはできません。記述言語が欠如していることは、いまだに核心的情報が表明されていないことを示しています。一言で言えば、文書は静的であり、読者が全体概要または潜在的な影響を理解しようとするとアクション可能な知見、データ、あるいは意味ある主題事項を全く含んでいません。 ## Text to translate The original summary is concise, accurate, and logically consistent with the provided key points. It clearly communicates that the document is a structural template devoid of substantive information. No improvements are necessary. ## Summary The provided text offers no substantive news story, argument, or narrative, making it impossible to derive a main message beyond its placeholder nature. Essentially, the content functions only as a structural template containing generic labels like "$ code," which represents abstract programming concepts without specific technical details, and terms such as "$ constitution" or "$ governance" that lack defined legal or political contexts here. Because there are no sentences describing actual events, opinions, or factual claims, the material fails to establish any historical background, specific dates, or product names. Consequently, the text contains no forward-looking statements, predictions, or timelines regarding future developments. Without identifying specific users, companies, or industries, it is impossible to determine who might be impacted by this content. The absence of descriptive language confirms that no core information has been articulated yet. In short, the document remains static and devoid of actionable intelligence, data, or any meaningful subject matter for a reader seeking to grasp an overall gist or potential consequences.