Re: mem context is not reset between extended stats

From: Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>
To: Justin Pryzby <pryzby(at)telsasoft(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: mem context is not reset between extended stats
Date: 2021-09-21 11:28:35
Message-ID: 93ca19f5-00d4-5e39-471d-9b962a8c9201@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Denis Hirn 2021-09-21 11:35:13 Re: [PATCH] Allow multiple recursive self-references
Previous Message Dilip Kumar 2021-09-21 10:59:58 Re: row filtering for logical replication