【こねくしょんぷーりんぐ】

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

最終更新:
💡 接続を借りて使い、返して次にも使おう

データベースなどへの接続をプールに保持して再利用する仕組み。処理のたびに新しい接続を作る手間を減らし、接続数も管理する。

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

参考資料

← 用語集にもどる