ちょっとサーバがらみでいろいろ調べてたんで自分なりにまとめてみる。
発端は会社でDBの負荷分散のためにプログラムをいじってるみたいで
自分的にはちょっとメンドくせーなとおもいつつ、今までのこと考えてみると
PostgresSQLのpg_poolの場合はその辺いろいろやってくれたなぁって感じた。
そのアプリにコネクションプーリングをいれるかどうかは考えていなくて
もし手軽でそんなにコストかかんなきゃ入れてもいいレベルです。
あ、最初にコネクションプーリングとはって言ってみる。
* ウェブアプリケーションから DB への接続を開けっ放しにして、接続に必要とされるオーバーヘッドをカットして双方の負荷を下げる。
* ウェブアプリケーションと DB への接続を「使いまわす」ことで、同時接続本数を節約する。
引用:コネクションプーリングの話
んで上記のサイト見てみたら。
でもどうも MySQL は thread_cache とかを有効にすると(案外しなくてもそうなんだけど)実は接続に必要なオーバーヘッドがアプリケーション総体では無視できる程度の微々たるものだということがベンチマークの結果とかで分かる。それだったら Apache::DBI や CDBI の永続化の機能は OFF にしちゃいましょう…これがコネクションプーリングイラネ、みたいな話。
そんでもって「thread_cache」を調べてみると
まず、1コネクションの中で要求を受けたときにMysqlはスレッドを生成して、要求が終了すればスレッドを取る。
そのときにどのくらいスレッドをキャッシュしておくか。
(ちなみにデフォルトは「0」なので要求毎にスレッドが生成される)
Mysqlの場合は、これで大体のケースいける感じなんかね=。
Hatena:yamazさん
http://d.hatena.ne.jp/yamaz/20060903





