Re: Eager aggregation, take 3

Richard Guo <guofenglinux@gmail.com>

From: Richard Guo <guofenglinux@gmail.com>
To: Matheus Alcantara <matheusssilv97@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Tender Wang <tndrwang@gmail.com>, Paul George <p.a.george19@gmail.com>, Andy Fan <zhihuifan1213@163.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>, pgsql-hackers@lists.postgresql.org
Date: 2025-10-06T00:56:25Z
Lists: pgsql-hackers
On Sat, Oct 4, 2025 at 5:03 AM Matheus Alcantara
<matheusssilv97@gmail.com> wrote:
> I've disabled the cassert and executed the ANALYZE again before
> benchmarking and now I have similar results with a improvement on eager
> aggregate version:
>
> -- master
> Planning Time: 2.734 ms
> Execution Time: 5238.128 ms
>
> -- patched
> Planning Time: 2.578 ms
> Execution Time: 4732.584 ms

Great!

> The performance results look good to me. I don't have to much comments
> about the code although I'm still learning about the planner internals
> this patch seems in good shape to me.

Thanks for running the benchmark and reviewing the patch.

> I'm just attaching a new csv with the last results after running with
> cassert disabled and after executing ANALYZE. It looks good to me.

Yeah, the results look good this time.  There are no performance
regressions; on the contrary, several queries actually show very
really nice improvements.

- Richard



Commits

  1. Fix eager aggregation for semi/antijoin inner rels

  2. Cover additional errors and corner conditions in repack.c

  3. Fix volatile function evaluation in eager aggregation

  4. Fix collation handling for grouping keys in eager aggregation

  5. Rename apply_at to apply_agg_at for clarity

  6. Fix comment in eager_aggregate.sql

  7. Remove unnecessary include of "utils/fmgroids.h"

  8. Implement Eager Aggregation

  9. Allow negative aggtransspace to indicate unbounded state size

  10. Add macros for looping through a List without a ListCell.

  11. Account for the effect of lossy pages when costing bitmap scans.

  12. Fix a thinko in join_is_legal: when we decide we can implement a semijoin