PostgreSQL は接続数を増やせば速くなるのか¶
結論¶
接続できる数ではなく、同時実行できる処理の量が性能を決める。
接続を絞り多重化することで安定した性能を得る。
PostgreSQL の接続モデル¶
-
1接続 = 1プロセス(スレッドではない)
-
接続増加 → プロセス増加 → コンテキストスイッチのオーバーヘッド増大
-
接続ごとに
work_memを消費 → メモリ枯渇リスク -
接続確立コスト(プロセス起動・認証)も積み重なる
max_connections を上げても解決しない理由¶
-
上限を上げても同時実行能力は増えない
-
CPU コア数を超えた同時実行は待ち時間を増やし、スループットが低下する
-
アイドル接続は PostgreSQL 14 以降で負荷軽減されたが、メモリと接続枠は消費し続ける
コネクションプーリング(PgBouncer)¶
(図: SVG)