From: | Justin Pryzby <pryzby(at)telsasoft(dot)com> |
---|---|
To: | Jeff Davis <pgsql(at)j-davis(dot)com> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Default setting for enable_hashagg_disk |
Date: | 2020-04-07 22:39:01 |
Message-ID: | 20200407223900.GT2228@telsasoft.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-docs pgsql-hackers |
On Tue, Apr 07, 2020 at 11:20:46AM -0700, Jeff Davis wrote:
> The enable_hashagg_disk GUC, if set to true, chooses HashAgg based on
> costing. If false, it only generates a HashAgg path if it thinks it will fit
> in work_mem, similar to the old behavior (though it wlil now spill to disk if
> the planner was wrong about it fitting in work_mem). The current default is
> true.
Are there any other GUCs that behave like that ? It's confusing to me when I
see "Disk Usage: ... kB", despite setting it to "disable", and without the
usual disable_cost. I realize that postgres chose the plan on the hypothesis
that it would *not* exceed work_mem, and that spilling to disk is considered
preferable to ignoring the setting, and that "going back" to planning phase
isn't a possibility.
template1=# explain (analyze, costs off, summary off) SELECT a, COUNT(1) FROM generate_series(1,999999) a GROUP BY 1 ;
HashAggregate (actual time=1370.945..2877.250 rows=999999 loops=1)
Group Key: a
Peak Memory Usage: 5017 kB
Disk Usage: 22992 kB
HashAgg Batches: 84
-> Function Scan on generate_series a (actual time=314.507..741.517 rows=999999 loops=1)
A previous version of the docs said this, which I thought was confusing, and you removed it.
But I guess this is the behavior it was trying to .. explain.
+ <term><varname>enable_hashagg_disk</varname> (<type>boolean</type>)
+ ... This only affects the planner choice;
+ execution time may still require using disk-based hash
+ aggregation. The default is <literal>on</literal>.
I suggest that should be reworded and then re-introduced, unless there's some
further behavior change allowing the previous behavior of
might-exceed-work-mem.
"This setting determines whether the planner will elect to use a hash plan
which it expects will exceed work_mem and spill to disk. During execution,
hash nodes which exceed work_mem will spill to disk even if this setting is
disabled. To avoid spilling to disk, either increase work_mem (or set
enable_hashagg=off)."
For sure the release notes should recommend re-calibrating work_mem.
--
Justin
From | Date | Subject | |
---|---|---|---|
Next Message | PG Doc comments form | 2020-04-08 07:31:16 | recovery.conf in documentation for postgresql version 12 |
Previous Message | Jeff Davis | 2020-04-07 18:20:46 | Default setting for enable_hashagg_disk |
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2020-04-07 22:39:19 | pgsql: Allow users to limit storage reserved by replication slots |
Previous Message | Tom Lane | 2020-04-07 21:47:51 | Re: proposal \gcsv |