[Dbix-class] Re: Memory usage, something hanging on?

Matt S Trout dbix-class at trout.me.uk
Thu Jan 11 18:38:03 GMT 2007


On 9 Jan 2007, at 14:34, Adam Sjøgren wrote:

> On Mon, 8 Jan 2007 16:59:20 +0000, Matt wrote:
>
>>> But when do_search() returns, the memory is still in use. The  
>>> only way
>>> I can make it not be so, is by terminating the script or calling
>>> $schema->storage->disconnect. I would guess the memory should be  
>>> freed
>>> when $xs goes out of scope(-ish)?
> [...]
>
>> Sadly, I think I can tell you exactly what this is, and if I'm right
>> it's nothing we can help you with :(
>
>> DBD::Pg doesn't use cursors, it fetches the entire data into local
>> memory. DBIx::Class uses prepare_cached to get the $sth.
>
>> So, I believe what you're seeing is DBD::Pg fetching the full dataset
>> and not releasing it until the $sth is re-executed by the next  
>> search.
>
> I guess the search has to be the "same" (for some definition of that)
> for the release to happen?
>
>> Try forcing the $dbh to disconnect at the end of do_search and see if
>> that drops the memory.
>
> Calling $schema->storage->disconnect() does release the memory - but
> doing that kind of defeats the purpose of the connection pooling,
> right?

Yes, but that proves I'm right, at least.

Not surprised finish didn't work since DBIx::Class calls it for you :)

Have a poke around in $dbh->{CACHED_KIDS} or whatever it's called  
(check the DBI docs, my memory's fuzzy :), you should be able to nuke  
the appropriate key of that to get the memory back, too.

-- 
Matt S Trout, Technical Director, Shadowcat Systems Ltd.
Offering custom development, consultancy and support contracts for  
Catalyst,
DBIx::Class and BAST. Contact mst (at) shadowcatsystems.co.uk for  
details.
+ Help us build a better perl ORM: http://dbix- 
class.shadowcatsystems.co.uk/ +





More information about the Dbix-class mailing list