用語集のすべての用語

コネクションプーリング

PostgreSQL のコネクションプーリングとは?

PostgreSQL の各接続はそれぞれ専用のサーバープロセスで処理されるため、コネクションプーリングでは一定数のデータベース接続を開いたままにして、多数のクライアントで共有します。

PostgreSQL は「ユーザーごとに 1 プロセス」のモデルを採用しています。クライアント接続はそれぞれサーバー上の専用のバックエンドプロセスで処理され、同時に存在できる接続数の上限は max_connections 設定で決まります。コネクションプールはアプリケーションとデータベースの間に位置し、限られた数のサーバー接続を開いたままにして、必要に応じてクライアントに割り当てます。

プールはアプリケーション内部に置くこと(ほとんどのドライバーや ORM に組み込まれています)も、PgBouncer のようにサーバーの前段に置く独立したプーラーとして動かすこともできます。トランザクション単位のプーリングでは、サーバー接続はトランザクションごとにプールへ戻されるため、次のトランザクションは別の接続で実行される可能性があります。セッションレベルの SET コマンドや一時テーブルなど、セッション状態に依存するものは、このモードでは注意が必要です。

例

この例では、サーバーの接続数の上限を表示し、現在のクライアント接続を状態ごとに数えます。アイドル状態の接続が多いのは、プールが役立つことを示す典型的な兆候です。

SHOW max_connections;

SELECT state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY state;

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語