* Stephen Frost (sfr...@snowman.net) wrote: > * Robert Haas (robertmh...@gmail.com) wrote: > > > Making it part of DISCARD PLANS; and back-patching it to 8.3 where > > > DISCARD was introduced would be awesome for me. :) > > > > I'd need to look at this more closely before committing anything, but > > at first blush I think that's reasonable. Have a patch? > > To be honest, I was fully expecting a response of "that's hard to do."
Soo, yeah, I found the "this is hard" part. Basically, the plan cacheing, etc, is all handled by the stored procedures themselves, and we havn't got any way to tell a PL "destroy all your plans." We might be able to hack up fmgr to throw away all references to functions, but that wouldn't release the memory they use up, making 'discard plans;' leak like a sieve. What's worse is that most PLs actually *also* allocate a bunch of stuff in TopMemoryContext, meaning even if we figured out what contexts are used by the PLs, we still couldn't nuke them. Personally, I'm not a fan of the PLs doing that (perhaps there's some performance reason? dunno). A few approaches come to mind for dealing with this- #1. Add a new 'Top-but-removed-on-DISCARD' context and modify the PLs to use that instead of TopMemoryContext and require any other contexts they create to be children of it. #2. Add another entry point to the PLs in pg_pltemplate.h which is a function to be called on DISCARD. #3. Add a way for PLs to request a context similar to #1, but would be on a per-PL basis. This would involve adding a new function to mmgr/, or adding a new parameter for creating a context. I like the idea of having a context-per-PL, but I don't know that I can justify the complications necessary to make it happen. Given that they're all already dumping things in TopMemoryContext, at least moving them out of *that* would improve the situation, so my inclination is to do #1. Of course, user-added PLs wouldn't get this benefit and would still leak memory after a DISCARD until they're updated. After the above is figured out, we should be able to go through and make fmgr get cleaned up after a DISCARD. Thoughts? Stephen
signature.asc
Description: Digital signature