DBの基礎 - コネクションプーリングについて


コネクションプーリングについて、わかっていないことが多すぎたので、ちょっとだけ調べたことをメモで残しておきます。
今はまだ触りレベルしかわかっていなのいので、もう少しちゃんと分かるようになりたい!


😀 [スライド] データベースの羅針盤

コネクションプーリングを調べている過程で偶然見付け足資料
データベース技術の羅針盤』。
とにかくわかりやすくて、俯瞰的にDBの業界を知ることができる資料。すばらしすぎる。

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

DBのコネクションを一定数確立しておいて、それを使いまわす手法のこと。
DBへの接続に必要となるオーバーヘッドをカットしてWeb/DBの双方の負荷を下げる。
また、WebとDBの接続を使いまわすことで同時接続数を節約する。
用意した、コネクション数を超えたアクセスは、コネクションに空きがでるまで待たされる。

以下はOracle関連の話ですが、基本はおんなじだと思います。

🐰 Oracle Connection Pooling

  - 新規のサーバープロセスの作成に必要な処理
    - OSに新しいプロセスを割り当ててもらう
    - プロセス空間をOracle用に初期化
    - Oracle SGAにアクセスできるように設定
    - Oracleを使えるようにするためのパラメータを読み込んで初期化

(1)OracleでSQLを実行にかかるコストと、コネクションを生成するコストを比較
した場合、コネクション生成のほうが圧倒的にコストが高くなるそうです。

😼 コネクションのマイナス要素

コストが高い一方で、コネクションを持ちすぎることには次のマイナス要素がある

  - 接続要求処理は、CPU使用料や応答時間におけるコストが高い
  - アイドル状態のコネクションは、メモリリソースを無駄に消費する

🐠 開発者とDBAの視点それぞれで考えるべきこと

  - 開発者・設計者
    - 接続頻度や保持するコネクション数は適切か?コネクションプーリングは使用可能か?

  - DBA
    - どのようなアプリケーションからどのような接続形態で使用されるのか?

🚜 コネクションプーリングの接続プロセス

Oracleの場合は、コネクションプールの管理モジュールがコネクションの管理と割り当てを担当する。

アプリケーション・プロセス x3 <- 獲得・返却 -> コネクションプールの管理モジュール <- コネクションの生成・切断 -> DB

🐝 コネクションプーリングの構成要素

  - 物理接続数のコントロール
    - DB内部の実装によって変わる

  - 最小物理接続数までの接続
    - 一気に取得するタイプ、段階的に取得するタイプ
  - 最小物理接続数 -> 最大物理接続数
    - 要求があればで取得するタイプ、先回りして取得するタイプ

  - 最大物理接続数を超える要求
    - 積極型、我慢型、厳密型

🐮 アイドル接続の奪取と切断

メンテナーンススレッドは、一定時間使用されていない物理接続を切断するためのしくみ。
これによって、使われていないスレッドが生き残り続けるのを避ける。

👽 障害時の挙動

コネクションプーリングには、障害を検知するためのSQL文を設定できる。
設定できるタイミングは『論理接続獲得時、論理接続返却時、アイドル時に一定間隔』の3つ。
プロセス障害の可能性を意識して、楽観型のしくみにするとよい。

🤔 あとがき

ちょっとわかっていない部分が多いので、もしコネクションプーリング
を理解する上で、お勧めの資料とかあればぜひ教えてください^^

🏈 参考リンク

コネクションプーリングとは 【 connection pooling 】 〔 コネクションプール 〕 - 意味/解説/説明/定義 : IT用語辞典

コネクションプーリングの話 - naoyaのはてなダイアリー

門外不出のOracle現場ワザ 第5章

RDBMSのコネクションプーリングとかその辺の話 - wyukawa’s blog

RDBMSでコネクションプールが必要な理由、わからない。 - Togetterまとめ

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍