Doran Barton wrote:
> I'm a relative newbie with DBIx::Class- but recently deployed a new web
> application using it. The application works great and thanks to DBIx::Class,
> it took less time to do.
>
> The application is implemented as mod_perl content handler. I am using
> Apache::DBI, as with other mod_perl applications, to maintain persistent
> connections to our PostgreSQL database. However, since deploying this
> application, we frequently exhaust our database connections. I think,
> perhaps, DBIx::Class is not taking advantage of Apache::DBI.
The problem is that if you open a handle before MP fork with Apache::DBI it
hangs onto it, resulting in all sorts of interesting explosions with
DBIx::Class, which then ends up with a duff connection handle.
As a result, in its quest to be fork- and thread- safe, DBIx::Class avoids
using the Apache::DBI connection stuff. I'm not sure how that would result in
exhausting db connections though since DBIx::Class keeps its connection
persistent so it should only need one per process/thread using it.
If you can recommend some sort of half-way house that allows DBIC to keep its
users from unexpected crashes but still supports Apache::DBI use, I'd be
interested to hear.
I can also think of two possible workarounds - (1) use sqlrelay for thread
pooling, (2) override Storage::DBI's connect() method to not route round
Apache::DBI and keep an eye on your connections yourself.
--
Matt S Trout Offering custom development, consultancy and support
Technical Director contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd. mst (at) shadowcatsystems.co.uk for more information
+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/