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

Commit 18d85e9

Browse files
committed
Further improve stability fix for partition_aggregate test.
Commit 7cb0a42 overlooked that the multi-level partition test table pagg_tab_ml still had an exactly even row split at its upper level of partitioning, so that some of the sub-aggregation plan steps still had exactly equal costs, leading to plan instability. Tweak the partition boundaries some more to make the row distribution unequal at both levels. This leads to more changes in the "expected" plan order than the previous round, but it seems fine. (Actually, I'm surprised that this didn't affect even more plans in this test: looking at the underlying costs shows that some of the parallel plan groups are *not* getting sorted by cost. Bug?) Per buildfarm member lousyjack, https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=lousyjack&dt=2020-04-04%2021%3A03%3A04 Discussion: https://postgr.es/m/24467.1585838693@sss.pgh.pa.us
1 parent 6b466bf commit 18d85e9

File tree

2 files changed

+34
-34
lines changed

2 files changed

+34
-34
lines changed

src/test/regress/expected/partition_aggregate.out

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -926,8 +926,8 @@ SELECT a, c, sum(b), avg(c), count(*) FROM pagg_tab_m GROUP BY (a+b)/2, 2, 1 HAV
926926

927927
-- Test with multi-level partitioning scheme
928928
CREATE TABLE pagg_tab_ml (a int, b int, c text) PARTITION BY RANGE(a);
929-
CREATE TABLE pagg_tab_ml_p1 PARTITION OF pagg_tab_ml FOR VALUES FROM (0) TO (10);
930-
CREATE TABLE pagg_tab_ml_p2 PARTITION OF pagg_tab_ml FOR VALUES FROM (10) TO (20) PARTITION BY LIST (c);
929+
CREATE TABLE pagg_tab_ml_p1 PARTITION OF pagg_tab_ml FOR VALUES FROM (0) TO (12);
930+
CREATE TABLE pagg_tab_ml_p2 PARTITION OF pagg_tab_ml FOR VALUES FROM (12) TO (20) PARTITION BY LIST (c);
931931
CREATE TABLE pagg_tab_ml_p2_s1 PARTITION OF pagg_tab_ml_p2 FOR VALUES IN ('0000', '0001', '0002');
932932
CREATE TABLE pagg_tab_ml_p2_s2 PARTITION OF pagg_tab_ml_p2 FOR VALUES IN ('0003');
933933
-- This level of partitioning has different column positions than the parent
@@ -946,21 +946,19 @@ SET max_parallel_workers_per_gather TO 2;
946946
-- is not partial agg safe.
947947
EXPLAIN (COSTS OFF)
948948
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;
949-
QUERY PLAN
950-
--------------------------------------------------------------------------------------------
949+
QUERY PLAN
950+
--------------------------------------------------------------------------------------
951951
Sort
952-
Sort Key: pagg_tab_ml_2.a, (sum(pagg_tab_ml_2.b)), (array_agg(DISTINCT pagg_tab_ml_2.c))
952+
Sort Key: pagg_tab_ml.a, (sum(pagg_tab_ml.b)), (array_agg(DISTINCT pagg_tab_ml.c))
953953
-> Gather
954954
Workers Planned: 2
955955
-> Parallel Append
956956
-> GroupAggregate
957-
Group Key: pagg_tab_ml_2.a
958-
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
957+
Group Key: pagg_tab_ml.a
958+
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
959959
-> Sort
960-
Sort Key: pagg_tab_ml_2.a
961-
-> Append
962-
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
963-
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
960+
Sort Key: pagg_tab_ml.a
961+
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
964962
-> GroupAggregate
965963
Group Key: pagg_tab_ml_5.a
966964
Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
@@ -970,11 +968,13 @@ SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HA
970968
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5
971969
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6
972970
-> GroupAggregate
973-
Group Key: pagg_tab_ml.a
974-
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
971+
Group Key: pagg_tab_ml_2.a
972+
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
975973
-> Sort
976-
Sort Key: pagg_tab_ml.a
977-
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
974+
Sort Key: pagg_tab_ml_2.a
975+
-> Append
976+
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
977+
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
978978
(27 rows)
979979

980980
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;
@@ -1000,13 +1000,11 @@ SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HA
10001000
Workers Planned: 2
10011001
-> Parallel Append
10021002
-> GroupAggregate
1003-
Group Key: pagg_tab_ml_2.a
1004-
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
1003+
Group Key: pagg_tab_ml.a
1004+
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
10051005
-> Sort
1006-
Sort Key: pagg_tab_ml_2.a
1007-
-> Append
1008-
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
1009-
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
1006+
Sort Key: pagg_tab_ml.a
1007+
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
10101008
-> GroupAggregate
10111009
Group Key: pagg_tab_ml_5.a
10121010
Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
@@ -1016,11 +1014,13 @@ SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HA
10161014
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5
10171015
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6
10181016
-> GroupAggregate
1019-
Group Key: pagg_tab_ml.a
1020-
Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
1017+
Group Key: pagg_tab_ml_2.a
1018+
Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
10211019
-> Sort
1022-
Sort Key: pagg_tab_ml.a
1023-
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
1020+
Sort Key: pagg_tab_ml_2.a
1021+
-> Append
1022+
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2
1023+
-> Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3
10241024
(25 rows)
10251025

10261026
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
@@ -1249,12 +1249,12 @@ SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
12491249
-> Partial HashAggregate
12501250
Group Key: pagg_tab_ml.b
12511251
-> Parallel Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
1252-
-> Partial HashAggregate
1253-
Group Key: pagg_tab_ml_1.b
1254-
-> Parallel Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_1
12551252
-> Partial HashAggregate
12561253
Group Key: pagg_tab_ml_3.b
12571254
-> Parallel Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_3
1255+
-> Partial HashAggregate
1256+
Group Key: pagg_tab_ml_1.b
1257+
-> Parallel Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_1
12581258
-> Partial HashAggregate
12591259
Group Key: pagg_tab_ml_4.b
12601260
-> Parallel Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_4
@@ -1287,14 +1287,14 @@ SELECT a, sum(b), count(*) FROM pagg_tab_ml GROUP BY a, b, c HAVING avg(b) > 7 O
12871287
Group Key: pagg_tab_ml.a, pagg_tab_ml.b, pagg_tab_ml.c
12881288
Filter: (avg(pagg_tab_ml.b) > '7'::numeric)
12891289
-> Seq Scan on pagg_tab_ml_p1 pagg_tab_ml
1290-
-> HashAggregate
1291-
Group Key: pagg_tab_ml_1.a, pagg_tab_ml_1.b, pagg_tab_ml_1.c
1292-
Filter: (avg(pagg_tab_ml_1.b) > '7'::numeric)
1293-
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_1
12941290
-> HashAggregate
12951291
Group Key: pagg_tab_ml_3.a, pagg_tab_ml_3.b, pagg_tab_ml_3.c
12961292
Filter: (avg(pagg_tab_ml_3.b) > '7'::numeric)
12971293
-> Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_3
1294+
-> HashAggregate
1295+
Group Key: pagg_tab_ml_1.a, pagg_tab_ml_1.b, pagg_tab_ml_1.c
1296+
Filter: (avg(pagg_tab_ml_1.b) > '7'::numeric)
1297+
-> Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_1
12981298
-> HashAggregate
12991299
Group Key: pagg_tab_ml_4.a, pagg_tab_ml_4.b, pagg_tab_ml_4.c
13001300
Filter: (avg(pagg_tab_ml_4.b) > '7'::numeric)

src/test/regress/sql/partition_aggregate.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ SELECT a, c, sum(b), avg(c), count(*) FROM pagg_tab_m GROUP BY (a+b)/2, 2, 1 HAV
202202
-- Test with multi-level partitioning scheme
203203

204204
CREATE TABLE pagg_tab_ml (a int, b int, c text) PARTITION BY RANGE(a);
205-
CREATE TABLE pagg_tab_ml_p1 PARTITION OF pagg_tab_ml FOR VALUES FROM (0) TO (10);
206-
CREATE TABLE pagg_tab_ml_p2 PARTITION OF pagg_tab_ml FOR VALUES FROM (10) TO (20) PARTITION BY LIST (c);
205+
CREATE TABLE pagg_tab_ml_p1 PARTITION OF pagg_tab_ml FOR VALUES FROM (0) TO (12);
206+
CREATE TABLE pagg_tab_ml_p2 PARTITION OF pagg_tab_ml FOR VALUES FROM (12) TO (20) PARTITION BY LIST (c);
207207
CREATE TABLE pagg_tab_ml_p2_s1 PARTITION OF pagg_tab_ml_p2 FOR VALUES IN ('0000', '0001', '0002');
208208
CREATE TABLE pagg_tab_ml_p2_s2 PARTITION OF pagg_tab_ml_p2 FOR VALUES IN ('0003');
209209

0 commit comments

Comments
 (0)