Re: Significant performance issues with array_agg() + HashAggregate plans on Postgres 17

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Jeff Davis <pgsql(at)j-davis(dot)com>
Cc: Scott Carey <scott(dot)carey(at)algonomy(dot)com>, David Rowley <dgrowleyml(at)gmail(dot)com>, pgsql-performance(at)lists(dot)postgresql(dot)org
Subject: Re: Significant performance issues with array_agg() + HashAggregate plans on Postgres 17
Date: 2026-04-03 19:56:22
Message-ID: 3829071.1775246182@sss.pgh.pa.us
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Jeff Davis <pgsql(at)j-davis(dot)com> writes:
> One idea would be to update parent contexts' memory totals recursively
> each time a subcontext allocates a new block. Block allocations are
> infrequent enough that may be acceptable.

> If we are worried about affecting unrelated cases, we could set an
> "accounting_enabled" flag for the contexts we care about, which would
> be automatically inherited by subcontexts, and then stop recursing up
> when that flag is false.

Yeah, I was speculating about similar ideas. Since mem_allocated
is only changed after a malloc() or free() call, it probably
wouldn't add too much overhead to propagate that up to parent
contexts. I agree with having a flag to prevent the propagation
from going up further than we actually care about, though.

Would it make sense to accumulate those values in a separate field
child_mem_allocated, rather than redefining what mem_allocated
means?

regards, tom lane

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Jeff Davis 2026-04-03 20:01:38 Re: Significant performance issues with array_agg() + HashAggregate plans on Postgres 17
Previous Message Jeff Davis 2026-04-03 19:36:23 Re: Significant performance issues with array_agg() + HashAggregate plans on Postgres 17