コネクションプーリングについて、わかっていないことが多すぎたので、ちょっとだけ調べたことをメモで残しておきます。
今はまだ触りレベルしかわかっていなのいので、もう少しちゃんと分かるようになりたい!
😀 [スライド] データベースの羅針盤
コネクションプーリングを調べている過程で偶然見付け足資料
『データベース技術の羅針盤』。
とにかくわかりやすくて、俯瞰的に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のはてなダイアリー
RDBMSのコネクションプーリングとかその辺の話 - wyukawa’s blog
RDBMSでコネクションプールが必要な理由、わからない。 - Togetterまとめ