TL

コネクションプーリング

DB 接続の確立は重いため、作った接続を使い回す仕組みです。プールの動き、接続の枯渇、上限やタイムアウトの設定の勘所を解説します。

中級コネクションプーリングデータベース性能最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.DB 接続の確立は認証や TCP のやり取りで重いので、毎回作らずプールに保持して使い回す。
  • 2.アプリは接続を借りて使い、終わったら閉じずにプールへ返す。空き接続が再利用されるので往復が省ける。
  • 3.プールの上限と DB 側の最大接続数の整合が肝。足りないと枯渇待ち、多すぎると DB が過負荷になる。

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

アプリが DB を使うには、まず 接続(コネクション) を張る必要があります。ところがこの接続を 1 から作る処理は、見た目以上に重い作業です。TCP の確立、認証(パスワードや TLS のやり取り)、サーバー側でのセッション用メモリ確保などが毎回発生します。1 回あたり数ミリ秒でも、リクエストごとに繰り返せば無視できません。

コネクションプーリング は、あらかじめ作っておいた接続を プール(貯水池) にためておき、アプリが必要なときに借りて、使い終わったら返して 使い回す 仕組みです。

プールの動き

プールを使うと、接続のライフサイクルは「作る・捨てる」から「借りる・返す」に変わります。

  • アプリは新規に接続を作るのではなく、プールから 空いている接続を借りる
  • クエリを実行し終えたら、接続を 閉じずにプールへ返す
  • 返された接続は次のリクエストで再利用される。実際の確立コストは初回だけで済む。
観点プールなし(都度接続)プールあり(使い回し)
接続の確立リクエストごとに毎回起動時などにまとめて、以後は再利用
1 リクエストの往復認証ぶん余計にかかる借りる・返すだけで軽い
DB 側のセッション数急増しやすい上限内に収まる

多くの言語やフレームワークでは、接続を close() する操作が「破棄」ではなく「プールへ返却」を意味するように作られています。コードの見た目は素朴な接続と同じでも、裏でプールが効いているわけです。

接続の枯渇と上限設定

プールに置ける接続の数には 上限(最大プールサイズ) があります。同時アクセスが増え、貸し出せる接続がすべて使用中になると、後続のリクエストは 空きが返ってくるのを待つ ことになります。これが 接続の枯渇(プール枯渇) です。待ち時間が長引けばタイムアウトし、ユーザーから見れば「DB が遅い・落ちた」ように見えます。

主な設定項目は次の通りです。

設定意味小さすぎると大きすぎると
最大プールサイズ同時に貸し出せる接続の上限枯渇して待ち・タイムアウトDB の最大接続数を圧迫
最小(アイドル)数常に確保しておく空き接続急な増加に追従が遅い使わない接続を抱え続ける
取得タイムアウト空きを待つ最大時間すぐ失敗扱いになる詰まりを長く引きずる
アイドルタイムアウト使われない接続を閉じるまでの時間接続を頻繁に作り直す不要な接続が残る
プール上限と DB の最大接続数を合わせる

プールの最大サイズは、DB サーバー側の最大接続数(PostgreSQL なら max_connections)の範囲に収める必要があります。アプリのインスタンスを 10 台に増やし、各々がプール上限 100 を持てば、合計 1000 接続を要求します。DB 側がそこまで許可していなければ接続エラーが多発し、許可していてもメモリを食い潰して DB 全体が不安定になります。台数 × プール上限の合計を必ず見積もりましょう。

適切なサイズの考え方

「大きくすれば速い」とは限りません。DB が同時に効率よく捌けるクエリ数には限界があり、それを超える接続は 待ち行列を内部に作るだけ で、かえって全体のスループットを下げます。CPU コア数やディスク性能を踏まえ、まずは控えめなサイズから始め、実際の待ち時間や DB の負荷を見ながら調整するのが定石です。

外部プーラーという選択肢

アプリ側のプールに加えて、DB の手前に専用の接続プーラー(PostgreSQL の PgBouncer など)を置く構成もよく使われます。多数のアプリインスタンスやサーバーレス環境のように接続元が増減しやすい場合に、DB への実接続数を一定に抑えられるのが利点です。アプリ側は軽いプール、DB 直前で実接続を絞る、という二段構えが効きます。

コネクションプーリングは、重い接続確立を隠して性能を底上げする基本技術です。ポイントは上限値の設計に尽き、アプリの台数と DB の許容量を突き合わせて、枯渇も過負荷も避ける数に整えることが肝心です。

データベース Article

コネクションプーリングを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

コネクションプーリング

比較で見る軸

難易度: intermediate / カテゴリ: データベース / タグ数: 3

導入後に効く点

アプリは接続を借りて使い、終わったら閉じずにプールへ返す。空き接続が再利用されるので往復が省ける。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
データベース
タグ数
3

判断チェックリスト

  • 自社の用途が「コネクションプーリング / データベース」に近いか確認する。
  • 強みである「DB 接続の確立は認証や TCP のやり取りで重いので、毎回作らずプールに保持して使い回す。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

コネクションプーリングデータベース性能コネクションプーリングデータベース性能
参考: 公式情報