【こねくしょんぷーりんぐ】
コネクションプーリング とは?
最終更新:
💡 接続を借りて使い、返して次にも使おう
データベースなどへの接続をプールに保持して再利用する仕組み。処理のたびに新しい接続を作る手間を減らし、接続数も管理する。
📌 このページのポイント
- 既存の接続を再利用して、新しい接続を作る手間を減らす
- 処理が終わったら、利用した接続をプールへ返す
- 最大接続数・待ち時間・接続の寿命などを環境に合わせて設定する
- アプリ内のライブラリ型と、外部の中継サービス型などがある
どうして接続を使い回すの?
データベースへ新しく接続するには、通信の準備や認証などの処理が必要だからだよ。プールに使える接続があれば、それを利用して新規接続の手間を減らせる。接続にかかる時間や効果は、環境によって違うんだ。
プールでは、どういう順番で使うの?
使える接続を借り、データベースの処理を行い、終わったら返す、という流れだよ。たとえばADO.NETではCloseを呼ぶと、プーリングが有効なら通常は接続をプールへ返す。最初に全部の接続を作るとは限らず、必要に応じて追加する実装もあるんだ。
接続を多く用意するほど速い?
そうとは限らないよ。DBの処理能力や接続数の上限、アプリの台数、同時に行う処理を考える必要がある。上限まで使われていれば、次の処理は接続を待ち、待ち時間を超えると失敗する場合もある。決まった計算式だけで選ばず、負荷と待ち時間を測って調整しよう。
借りた接続を返し忘れたら?
使える接続が少なくなり、ほかの処理が待つ原因になる。これをコネクションリークと呼ぶよ。例外が起きても返せるよう、ライブラリに合った終了処理を行う。HikariCPには、長く返されない接続をログで知らせる機能もあるけれど、ログが出れば原因が確定するわけではないんだ。
プールはアプリの中にあるの?
まとめ:ざっくりこれだけ覚えればOK!
「コネクションプーリング」って出てきたら「接続を借りて使い、返して再利用する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Connection Pooling」 = 接続のプール管理
💬 Pool(溜め池)に接続をためておいて、必要な時に取り出して使うイメージだよ