Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 01474f5

Browse files
committed
Force parallelism in partition_aggregate
Commit db0d67d tweaked sort costing, which however resulted in a couple plan changes in our regression tests. Most of the new plans were fine, but partition_aggregate were meant to test parallel plans and the new plans were serial. Fix that by lowering parallel_setup_cost to 0, which is enough to switch to the parallel plan again. Report and patch by David Rowley. Author: David Rowley Reviewed-by: Tomas Vondra Discussion: https://postgr.es/m/CAApHDvpVFgWzXdtUQkjyOPhNrNvumRi_=ftgS79KeAZ92tnHKQ@mail.gmail.com
1 parent 4209126 commit 01474f5

File tree

2 files changed

+63
-54
lines changed

2 files changed

+63
-54
lines changed

src/test/regress/expected/partition_aggregate.out

Lines changed: 60 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -942,40 +942,43 @@ INSERT INTO pagg_tab_ml SELECT i % 30, i % 10, to_char(i % 4, 'FM0000') FROM gen
942942
ANALYZE pagg_tab_ml;
943943
-- For Parallel Append
944944
SET max_parallel_workers_per_gather TO 2;
945+
SET parallel_setup_cost = 0;
945946
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
946947
-- for level 1 only. For subpartitions, GROUP BY clause does not match with
947948
-- PARTITION KEY, but still we do not see a partial aggregation as array_agg()
948949
-- is not partial agg safe.
949950
EXPLAIN (COSTS OFF)
950951
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER BY 1, 2, 3;
951-
QUERY PLAN
952-
--------------------------------------------------------------------------------------
953-
Sort
954-
Sort Key: pagg_tab_ml.a, (sum(pagg_tab_ml.b)), (array_agg(DISTINCT pagg_tab_ml.c))
955-
-> Append
956-
-> GroupAggregate
957-
Group Key: pagg_tab_ml.a
958-
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
959-
-> Sort
960-
Sort Key: pagg_tab_ml.a
961-
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
962-
-> GroupAggregate
963-
Group Key: pagg_tab_ml_2.a
964-
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
965-
-> Sort
966-
Sort Key: pagg_tab_ml_2.a
967-
-> Append
968-
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
969-
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
970-
-> GroupAggregate
971-
Group Key: pagg_tab_ml_5.a
972-
Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
973-
-> Sort
974-
Sort Key: pagg_tab_ml_5.a
975-
-> Append
976-
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5
977-
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6
978-
(25 rows)
952+
QUERY PLAN
953+
--------------------------------------------------------------------------------------------
954+
Gather Merge
955+
Workers Planned: 2
956+
-> Sort
957+
Sort Key: pagg_tab_ml.a, (sum(pagg_tab_ml.b)), (array_agg(DISTINCT pagg_tab_ml.c))
958+
-> Parallel Append
959+
-> GroupAggregate
960+
Group Key: pagg_tab_ml.a
961+
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
962+
-> Sort
963+
Sort Key: pagg_tab_ml.a
964+
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
965+
-> GroupAggregate
966+
Group Key: pagg_tab_ml_5.a
967+
Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
968+
-> Sort
969+
Sort Key: pagg_tab_ml_5.a
970+
-> Append
971+
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5
972+
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6
973+
-> GroupAggregate
974+
Group Key: pagg_tab_ml_2.a
975+
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
976+
-> Sort
977+
Sort Key: pagg_tab_ml_2.a
978+
-> Append
979+
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
980+
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
981+
(27 rows)
979982

980983
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER BY 1, 2, 3;
981984
a | sum | array_agg | count
@@ -994,33 +997,36 @@ SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HA
994997
-- Without ORDER BY clause, to test Gather at top-most path
995998
EXPLAIN (COSTS OFF)
996999
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3;
997-
QUERY PLAN
998-
---------------------------------------------------------------------
999-
Append
1000-
-> GroupAggregate
1001-
Group Key: pagg_tab_ml.a
1002-
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
1003-
-> Sort
1004-
Sort Key: pagg_tab_ml.a
1005-
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
1006-
-> GroupAggregate
1007-
Group Key: pagg_tab_ml_2.a
1008-
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
1009-
-> Sort
1010-
Sort Key: pagg_tab_ml_2.a
1011-
-> Append
1012-
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
1013-
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
1014-
-> GroupAggregate
1015-
Group Key: pagg_tab_ml_5.a
1016-
Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
1017-
-> Sort
1018-
Sort Key: pagg_tab_ml_5.a
1019-
-> Append
1020-
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5
1021-
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6
1022-
(23 rows)
1000+
QUERY PLAN
1001+
---------------------------------------------------------------------------
1002+
Gather
1003+
Workers Planned: 2
1004+
-> Parallel Append
1005+
-> GroupAggregate
1006+
Group Key: pagg_tab_ml.a
1007+
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
1008+
-> Sort
1009+
Sort Key: pagg_tab_ml.a
1010+
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
1011+
-> GroupAggregate
1012+
Group Key: pagg_tab_ml_5.a
1013+
Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
1014+
-> Sort
1015+
Sort Key: pagg_tab_ml_5.a
1016+
-> Append
1017+
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5
1018+
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6
1019+
-> GroupAggregate
1020+
Group Key: pagg_tab_ml_2.a
1021+
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
1022+
-> Sort
1023+
Sort Key: pagg_tab_ml_2.a
1024+
-> Append
1025+
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
1026+
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
1027+
(25 rows)
10231028

1029+
RESET parallel_setup_cost;
10241030
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
10251031
-- for level 1 only. For subpartitions, GROUP BY clause does not match with
10261032
-- PARTITION KEY, thus we will have a partial aggregation for them.

src/test/regress/sql/partition_aggregate.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ ANALYZE pagg_tab_ml;
222222

223223
-- For Parallel Append
224224
SET max_parallel_workers_per_gather TO 2;
225+
SET parallel_setup_cost = 0;
225226

226227
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
227228
-- for level 1 only. For subpartitions, GROUP BY clause does not match with
@@ -235,6 +236,8 @@ SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HA
235236
EXPLAIN (COSTS OFF)
236237
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3;
237238

239+
RESET parallel_setup_cost;
240+
238241
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
239242
-- for level 1 only. For subpartitions, GROUP BY clause does not match with
240243
-- PARTITION KEY, thus we will have a partial aggregation for them.

0 commit comments

Comments
 (0)