On 12/07/2019 16:07, Julien Rouhaud wrote:
On Fri, Jun 14, 2019 at 5:40 PM Tom Lane <t...@sss.pgh.pa.us> wrote:
Heikki Linnakangas <hlinn...@iki.fi> writes:
In the patch, I documented that rd_amcache must be allocated in
CacheMemoryContext, or in rd_indexcxt if it's an index. It works, but
it's a bit weird.
Given the way the patch is implemented, it doesn't really matter which
context it's in, does it? The retail pfree is inessential but also
harmless, if rd_amcache is in rd_indexcxt. So we could take out the
"must". I think it's slightly preferable to use rd_indexcxt if available,
to reduce the amount of loose junk in CacheMemoryContext.
I agree that for indexes the context used won't make much difference.
But IMHO avoiding some bloat in CacheMemoryContext is a good enough
reason to document using rd_indexcxt when available.
Right, it doesn't really matter whether an index AM uses
CacheMemoryContext or rd_indexctx, the code works either way. I think
it's better to give clear advice though, one way or another. Otherwise,
different index AM's can end up doing it differently for no particular
reason, which seems confusing.
It would nice to have one memory context in every
relcache entry, to hold all the stuff related to it, including
rd_amcache. In other words, it would be nice if we had "rd_indexcxt" for
tables, too, not just indexes. That would allow tracking memory usage
more accurately, if you're debugging an out of memory situation for example.
We had some discussion related to that in the "hyrax
vs. RelationBuildPartitionDesc" thread. I'm not quite sure where
we'll settle on that, but some redesign seems inevitable.
There wasn't any progress on this since last month, and this patch
won't make the situation any worse. I'll mark this patch as ready for
committer, as it may save some time for people working on custom table
AM.
Pushed, thanks for the review! As Tom noted, some redesign here seems
inevitable, but this patch shouldn't get in the way of that, so no need
to hold this back for the redesign.
- Heikki