のみまくし日記

毎日が文化祭の前日、そんな環境っていいですよね。この日記は未来の自分へのメッセージです。

2005年06月09日 ()

Class::DBIでコネクションプーリングしたくない

ちょと前にあった、某カンファレンスの某発表によると(謎めき系)で、Class::DBI(Ima::DBI) で connect_cached されていいるので、ロードバランサでごにょごにょしてると、台数×ApacheのMaxClientsの数だけ接続されっぱなしなって、都度接続より全体的には負荷高くなるよね的な問題があったそうです。(MySQLの場合)

まさにウチも同じような状態になっていて、

package Ima::DBI::Ex::NoConnectCache;

use strict;
use vars qw($VERSION);
$VERSION = '0.01';

sub Ima::DBI::_mk_db_closure {
    my ($class, @connection) = @_;
    return sub {
        return DBI->connect(@connection);
    }
}

ってなのを作って、start.plで、設定しておけば既存のコードをいじらなくても、おけなので、これでいこうかなーとか思ってるんだけど、_mk_db_closure が上書きされているぜ的な警告がでていやん。なんか良い方法はないかなぁ。

そして、CPANにあげるべきか、こっそり自分たちだけで使うべきか。なんか、世の中のあれを否定しているようで。

Perl posted by takefumi | この日記へリンク | コメント(2) | トラックバック(0)

この日記へのトラックバック

この日記へのコメント

http://search.cpan.org/~lyokato/Class-DBI-Plugin-Connection-0.02/lib/Class/DBI/Plugin/Connection.pm
こんにちは。拙作ですが、Class::DBI::Plugin::Connection
ってのをCPANにあげてます。た
ぶんやってることは同じような感じだと思いますが、いかがでしょうか。
それとも
unless ($dbh && $dbh->FETCH('Active') && $dbh->ping){
ってチェックが既にまずいんでしょうか。

posted by kato at 2008年11月22日 20時48分 #

おお、これいっすね。知りませんでした。
DBI(Apache::DBI)とClass::DBIを一緒に使わざるを得ない場合の話ですよね。

クライアントの接続数が多いと(瞬間風速ではなく)、コネクションプーリングしないほうがトータルで効率よくね?的な話(ビミョウに違うけど)でしたので、このプラグイン使っても解決はしないけど。warnが出る問題は、importとcaller使って、ごにょごにょってやればwarnでないっすね。なんで、気がつかなかったんだろ。ありがとうございます。

(ちなみに、ボクの書いているコードはバグっていてうまくいかないケースがありました。たぶん。)

posted by きむら at 2008年11月22日 20時48分 #