Обсуждение: pgsql: Fix bug #16784 in Disk-based Hash Aggregation.

Поиск
Список
Период
Сортировка

pgsql: Fix bug #16784 in Disk-based Hash Aggregation.

От
Jeff Davis
Дата:
Fix bug #16784 in Disk-based Hash Aggregation.

Before processing tuples, agg_refill_hash_table() was setting all
pergroup pointers to NULL to signal to advance_aggregates() that it
should not attempt to advance groups that had spilled.

The problem was that it also set the pergroups for sorted grouping
sets to NULL, which caused rescanning to fail.

Instead, change agg_refill_hash_table() to only set the pergroups for
hashed grouping sets to NULL; and when compiling the expression, pass
doSort=false.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/16784-7ff169bf2c3d1588%40postgresql.org
Backpatch-through: 13

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/05c0258966b502fae1bd63dcbe74d52f5c6f6948

Modified Files
--------------
src/backend/executor/nodeAgg.c             |  24 +++-
src/test/regress/expected/groupingsets.out | 207 +++++++++++++++++++++++++++++
src/test/regress/sql/groupingsets.sql      |  21 +++
3 files changed, 245 insertions(+), 7 deletions(-)


Re: pgsql: Fix bug #16784 in Disk-based Hash Aggregation.

От
Tom Lane
Дата:
Jeff Davis <jdavis@postgresql.org> writes:
> Fix bug #16784 in Disk-based Hash Aggregation.

Buildfarm thinks this new test case is not completely stable.

It appears that only 32-bit machines are failing, and it's
not totally consistent even for them.  Dunno what to make of it.

            regards, tom lane



Re: pgsql: Fix bug #16784 in Disk-based Hash Aggregation.

От
Jeff Davis
Дата:
On Sun, 2020-12-27 at 02:09 -0500, Tom Lane wrote:
> Jeff Davis <jdavis@postgresql.org> writes:
> > Fix bug #16784 in Disk-based Hash Aggregation.
> 
> Buildfarm thinks this new test case is not completely stable.
> 
> It appears that only 32-bit machines are failing, and it's
> not totally consistent even for them.  Dunno what to make of it.

I think I just need to disable sort. Because there is a () group, we
don't need a Sort in the plan to exercise the bug.

Committed to master. I'll backport if the tests stabilize. I'm on
vacation now and will return on the 5th, so hopefully we're in a
reasonable state until then. If not, I can just revert my fix and deal
with it when I get back.

Regards,
    Jeff Davis





Re: pgsql: Fix bug #16784 in Disk-based Hash Aggregation.

От
Jeff Davis
Дата:
On Sun, 2020-12-27 at 09:59 -0800, Jeff Davis wrote:
> I think I just need to disable sort. Because there is a () group, we
> don't need a Sort in the plan to exercise the bug.

That still didn't stabilize the test, so I removed the EXPLAIN part of
the test and left the execution test in place.

The planning for grouping sets still uses work_mem in the knapsack
algorithm, so something about the other platforms is not considering
the plan with all hashes (except the () grouping set). I think we can
tune the test to be stable, but it doesn't seem critical so I think
we're fine just doing the execution-time test.

Regards,
    Jeff Davis