Re: Freeing plan memory
От | Nigel J. Andrews |
---|---|
Тема | Re: Freeing plan memory |
Дата | |
Msg-id | Pine.LNX.4.21.0210191824050.26324-100000@ponder.fairway2k.co.uk обсуждение исходный текст |
Ответ на | Re: Freeing plan memory (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: Freeing plan memory
|
Список | pgsql-hackers |
On Sat, 19 Oct 2002, Tom Lane wrote: > "Nigel J. Andrews" <nandrews@investsystems.co.uk> writes: > > The leak is that memory is grabbed in SPI_prepare() for a plan within > > whatever context is current when it does the palloc(). It may be the > > caller's or it may be the relevent SPI one. The plan is then copied > > out of this memory [and context] into a child of the procedure's > > context and forgotten about, or just plain forgotten. > > Au contraire: SPI_prepare builds the plan in its "execCxt", which is > reset before returning (look at _SPI_begin_call and _SPI_end_call). > So I see no leak there. Ah, yes, I see that now. > I'm not sure where the leak is in your plpython example, but I'd be > inclined to look to plpython itself, perhaps even just the string > concatenation expression in > plan = plpy.prepare("SELECT " + repr(a)) Well it's not that string operation. > plpgsql used to have terrible intra-function memory leaks, and only by > dint of much hard work has it been brought to the point where you can > expect a long loop in a plpgsql function not to chew up memory. AFAIK, > no one has yet done similar work for the other PL languages. Hmmm...my test case should boil down to a fairly small number of other calls in the SPI_prepare wrapper and a quick looks doesn't show anything interesting. Not sure I've got the time to dedicate to investigating this but I'll look at it as and when I can. I'm sending a patch for plpython.c to -patches which fixes a mistake I made in the previous patch. -- Nigel J. Andrews
В списке pgsql-hackers по дате отправления: