Re: Default setting for enable_hashagg_disk
Tomas Vondra <tomas.vondra@2ndquadrant.com>
From: Tomas Vondra <tomas.vondra@2ndquadrant.com>
To: Bruce Momjian <bruce@momjian.us>
Cc: Peter Geoghegan <pg@bowt.ie>, Robert Haas <robertmhaas@gmail.com>, Andres Freund <andres@anarazel.de>, David Rowley <dgrowleyml@gmail.com>, Jeff Davis <pgsql@j-davis.com>, Justin Pryzby <pryzby@telsasoft.com>, Melanie Plageman <melanieplageman@gmail.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2020-06-29T21:33:19Z
Lists: pgsql-hackers, pgsql-docs
On Mon, Jun 29, 2020 at 01:31:40PM -0400, Bruce Momjian wrote: >On Mon, Jun 29, 2020 at 10:20:14AM -0700, Peter Geoghegan wrote: >> I have no reason to believe that the planner is any more or any less >> likely to conclude that the hash table will fit in memory in v13 as >> things stand (I don't know if the BufFile issue matters). >> >> In general, grouping estimates probably aren't very good compared to >> join estimates. I imagine that in either v12 or v13 the planner is >> likely to incorrectly believe that it'll all fit in memory fairly >> often. v12 was much too permissive about what could happen. But v13 is >> too conservative. > >FYI, we have improved planner statistics estimates for years, which must >have affected node spill behavior on many node types (except hash_agg), >and don't remember any complaints about it. > I think misestimates for GROUP BY are quite common and very hard to fix. Firstly, our ndistinct estimator may give pretty bad results depending e.g. on how is the table correlated. I've been running some TPC-H benchmarks, and for partsupp.ps_partkey our estimate was 4338776, when the actual value is 15000000, i.e. ~3.5x higher. This was with statistics target increased to 1000. I can easily imagine even worse estimates with lower values. This ndistinct estimator is used even for extended statistics, so that can't quite save us. Moreover, the grouping may be on top of a join, in which case using ndistinct coefficients may not be possible :-( So I think this is a quite real problem ... regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Add hash_mem_multiplier GUC.
- d6c08e29e7bc 14.0 landed
- 78530c8e7a5a 13.0 landed
-
HashAgg: use better cardinality estimate for recursive spilling.
- 3a232a3183d5 13.0 landed
- 9878b643f37b 14.0 landed
-
Remove hashagg_avoid_disk_plan GUC.
- bcbf9446a298 14.0 landed
- 5a6cc6ffa914 13.0 landed
-
Doc fixup for hashagg_avoid_disk_plan GUC.
- d33f33539d7f 13.0 landed
- 7ce461560159 14.0 landed
-
Rework HashAgg GUCs.
- 13e0fa7ae50c 13.0 landed
- 92c58fd94801 14.0 landed
-
Disk-based Hash Aggregation.
- 1f39bce02154 13.0 cited
-
Implement partition-wise grouping/aggregation.
- e2f1eb0ee30d 11.0 cited
-
Defer creation of partially-grouped relation until it's needed.
- 4f15e5d09de2 11.0 cited