コンテンツにスキップ

PostgreSQL は接続数を増やせば速くなるのか

結論

接続できる数ではなく、同時実行できる処理の量が性能を決める。

接続を絞り多重化することで安定した性能を得る。

PostgreSQL の接続モデル

  • 1接続 = 1プロセス(スレッドではない)

  • 接続増加 → プロセス増加 → コンテキストスイッチのオーバーヘッド増大

  • 接続ごとに work_mem を消費 → メモリ枯渇リスク

  • 接続確立コスト(プロセス起動・認証)も積み重なる

max_connections を上げても解決しない理由

  • 上限を上げても同時実行能力は増えない

  • CPU コア数を超えた同時実行は待ち時間を増やし、スループットが低下する

  • アイドル接続は PostgreSQL 14 以降で負荷軽減されたが、メモリと接続枠は消費し続ける

コネクションプーリング(PgBouncer)

(図: SVG)