Re: Eager aggregation, take 3
Richard Guo <guofenglinux@gmail.com>
On Fri, Oct 3, 2025 at 3:41 AM Matheus Alcantara <matheusssilv97@gmail.com> wrote: > Thanks for all the details. I've disabled the nested loops and executed > the benchmark again and the results look much better! I see a 55% > improvement on query_31 on my machine now (MacOS M3 Max). Great! That is 2.23 times faster. > The only query that I see a considerable regression is query 23 which I > get a 23% worst execution time. I'm attaching the EXPLAIN(ANALYZE) > output from master and from the patched version if it's interesting. I tested query 23 in my local environment but didn't observe the regression. -- on master Planning Time: 1.950 ms Execution Time: 3260.924 ms -- on patched Planning Time: 2.197 ms Execution Time: 3237.287 ms I ran the benchmark at scale factor 1 and executed ANALYZE beforehand. For the build configuration, I disabled cassert. Comparing the plans, I noticed one key difference: in the plan you provided (query-23.patch.explain), the frequent_ss_items CTE uses parallel aggregation, whereas in my local environment it does not. This leads to a different final join order between the two plans. However, given the highly inaccurate size and cost estimates for the CTE Scan nodes, I'm not sure it's worth investigating further. I'm starting to feel that trying to tune performance here, with such inaccurate underlying estimates for CTEs, is like building on sand. > I'm also attaching a csv with the planning time and execution time from > master and the patched version for all queries. It contains the % of > difference between the executions. Negative numbers means that the > patched version using eager aggregation is faster. (I loaded this csv on > a postgres table and played with some queries to analyze the results). I really appreciate this; it's very helpful. > I'm just wondering if there is anything that can be done on the planner > to prevent this type of situation? I think the ideal solution is to improve our estimates for CTE relations to make the plans for TPC-DS queries more reasonable. Of course, for queries from other benchmarks, the issues may stem from other plan nodes. IMHO, we really need some improvements in our cost estimation. - Richard
Commits
-
Fix eager aggregation for semi/antijoin inner rels
- ffeda04259bb 19 (unreleased) landed
-
Cover additional errors and corner conditions in repack.c
- 2670cc298f42 19 (unreleased) cited
-
Fix volatile function evaluation in eager aggregation
- 3a08a2a8b4fd 19 (unreleased) landed
-
Fix collation handling for grouping keys in eager aggregation
- bd94845e8c90 19 (unreleased) landed
-
Rename apply_at to apply_agg_at for clarity
- 1206df04c200 19 (unreleased) landed
-
Fix comment in eager_aggregate.sql
- 36fd8bde1b77 19 (unreleased) landed
-
Remove unnecessary include of "utils/fmgroids.h"
- f997d777adf7 19 (unreleased) landed
-
Implement Eager Aggregation
- 8e11859102f9 19 (unreleased) landed
-
Allow negative aggtransspace to indicate unbounded state size
- 185e30426334 19 (unreleased) landed
-
Add macros for looping through a List without a ListCell.
- 14dd0f27d7cd 17.0 cited
-
Account for the effect of lossy pages when costing bitmap scans.
- 5edc63bda68a 11.0 cited
-
Fix a thinko in join_is_legal: when we decide we can implement a semijoin
- a43b190e3c71 9.0.0 cited