[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