Re: Eager aggregation, take 3
Richard Guo <guofenglinux@gmail.com>
On Sat, Oct 5, 2024 at 6:23 PM Richard Guo <guofenglinux@gmail.com> wrote:
>
> On Fri, Sep 27, 2024 at 11:53 AM Richard Guo <guofenglinux@gmail.com> wrote:
> > Here is an updated version of this patch that fixes the rowcount
> > estimate issue along this routine. (see set_joinpath_size.)
>
> I have worked on inventing some heuristics to limit the planning
> effort of eager aggregation. One simple yet effective approach I'm
> thinking of is to consider a grouped path as NOT useful if its row
> reduction ratio falls below a predefined minimum threshold. Currently
> I'm using 0.5 as the threshold, but I'm open to other values.
I ran the TPC-DS benchmark at scale 10 and observed eager aggregation
applied in several queries, including q4, q8, q11, q23, q31, q33, and
q77. Notably, the regression in q19 that Tender identified with v11
has disappeared in v13.
Here’s a comparison of Execution Time and Planning Time for the seven
queries with eager aggregation disabled versus enabled (best of 3).
Execution Time:
EAGER-AGG-OFF EAGER-AGG-ON
q4 105787.963 ms 34807.938 ms
q8 1407.454 ms 1654.923 ms
q11 67899.213 ms 18670.086 ms
q23 45945.849 ms 42990.652 ms
q31 10463.536 ms 10244.175 ms
q33 2186.928 ms 2217.228 ms
q77 2360.565 ms 2416.674 ms
Planning Time:
EAGER-AGG-OFF EAGER-AGG-ON
q4 2.334 ms 2.602 ms
q8 0.685 ms 0.647 ms
q11 0.935 ms 1.094 ms
q23 2.666 ms 2.582 ms
q31 1.051 ms 1.206 ms
q33 1.248 ms 1.796 ms
q77 0.967 ms 0.962 ms
There are good performance improvements in q4 and q11 (3~4 times).
For the other queries, execution times remain largely unchanged,
falling within the margin of error, with no notable regressions
observed.
For the planning time, I do not see notable regressions for any of the
seven queries.
It seems that the new cost estimates and the new heuristic are working
pretty well.
Thanks
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