【こねくしょんぷーる】
コネクションプール とは?
最終更新:
💡 DB接続を、借りて使って返す
データベース接続などを管理し、借りて使った後に返して再利用する仕組み。接続数の上限・返却・複数インスタンスでの考え方を説明します。
📌 このページのポイント
- 接続を管理し、処理ごとに借りて返して再利用
- 実装によっては必要になった時に接続を作る
- 上限に達すると、待機やタイムアウトが生じる
- 各アプリの設定とDB全体の接続容量を合わせて考える
DBにつなぐたびに、新しい接続を作るの?
プールを使うと、管理している接続を借りて使い、返して次の処理で再利用できるよ。毎回接続を作る手間を抑える仕組みだね。
起動時に、上限まで全部つなぐ?
必ずではないよ。例えばnode-postgresのPoolは空で作られ、必要になったときに接続を作る。上限の設定は、最初からその本数を作るという意味ではないんだ。
借りられる接続が、なくなったら?
使い終わった接続は、どうする?
借りた接続を、エラー時も含めて返す必要があるよ。node-postgresなら通常はclient.release()で返す。返却漏れで接続を使い切ると、後の処理が待機やタイムアウトになるんだ。
プールの大きさは、全アプリで同じでよい?
DBにつなぐ全インスタンスの合計を考えよう。台数が増えると、各プールの上限も積み重なる。DBの容量や管理用の余裕、処理の待ち時間を見て決めるので、全環境に共通の計算式ではないんだ。
もっと詳しく知りたい人へ
トランザクションも、毎回別の接続でよい?
node-postgresでは、一つのトランザクションに同じクライアントを使います。pool.queryを個別に呼ぶと別の接続へ割り当てられることがあるため、トランザクションには使わないと公式APIが案内しています。
サーバーレスなら、接続は毎回作り直す?
実行環境によります。公式のPool Sizingは、実行環境が維持され接続を再利用できる場合と、リクエスト後に実行環境が終了する場合を分けています。プールやプロキシの採用だけで、接続容量の検討が不要になるわけではありません。
まとめ:ざっくりこれだけ覚えればOK!
「コネクションプール」って出てきたら「DB接続などを、借りて返して再利用する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Connection pool」 = 接続を蓄えて管理する仕組み
💬 ここではDB接続を例に説明します。借りた接続をプールへ返すことと、DBとの物理的な接続を切ることは区別します。