Re: mem context is not reset between extended stats - Mailing list pgsql-hackers

From Tomas Vondra
Subject Re: mem context is not reset between extended stats
Date
Msg-id 93ca19f5-00d4-5e39-471d-9b962a8c9201@enterprisedb.com
Whole thread Raw
In response to Re: mem context is not reset between extended stats  (Justin Pryzby <pryzby@telsasoft.com>)
Responses Re: mem context is not reset between extended stats
List pgsql-hackers
On 9/21/21 3:37 AM, Justin Pryzby wrote:
> On Tue, Sep 21, 2021 at 02:15:45AM +0200, Tomas Vondra wrote:
>> On 9/15/21 10:09 PM, Justin Pryzby wrote:
>>> Memory allocation appeared be O(1) WRT the number of statistics objects, which
>>> was not expected to me.  This is true in v13 (and probably back to v10).
> 
> Of course I meant to say that it's O(N) and not O(1) :)
> 

Sure, I got that ;-)

>> In principle we don't expect too many extended statistics on a single table,
> 
> Yes, but note that expression statistics make it more reasonable to have
> multiple extended stats objects.  I noticed this while testing a patch to build
> (I think) 7 stats objects on each of our current month's partitions.
> autovacuum was repeatedly killed on this vm after using using 2+GB RAM,
> probably in part because there were multiple autovacuum workers handling the
> most recent batch of inserted tables.
> 
> First, I tried to determine what specifically was leaking so badly, and
> eventually converged to this patch.  Maybe there's additional subcontexts which
> would be useful, but the minimum is to reset between objects.
> 

Agreed.

I don't think there's much we could release, given the current design,
because we evaluate (and process) all expressions at once. We might
evaluate/process them one by one (and release the memory), but only when
no other statistics kinds are requested. That seems pretty futile.


>> These issues exist pretty much since PG10, which is where extended stats
>> were introduced, so we'll have to backpatch it. But there's no rush and I
>> don't want to interfere with rc1 at the moment.
> 
> Ack that.  It'd be *nice* if if the fix were included in v14.0, but I don't
> know the rules about what can change after rc1.
> 

IMO this is a bugfix, and I'll get it into 14.0 (and backpatch). But I
don't want to interfere with the rc1 tagging and release, so I'll do
that later this week.

>> Attached are two patches - 0001 is your patch (seems fine, but I looked only
>> very briefly) and 0002 is the context reset I proposed.
> 
> I noticed there seems to be a 3rd patch available, which might either be junk
> for testing or a cool new feature I'll hear about later ;)
> 

Haha! Nope, that was just an experiment with doubling the repalloc()
sizes in functional dependencies, instead of growing them in tiny
chunks. but it does not make a measurable difference, so I haven't
included that.


regards

-- 
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



pgsql-hackers by date:

Previous
From: Dilip Kumar
Date:
Subject: Re: row filtering for logical replication
Next
From: Denis Hirn
Date:
Subject: Re: [PATCH] Allow multiple recursive self-references