Make sure the explain output for partition wise join is stable

We disable bunch of planning options on the workers. This might be
risky if any concurrent test relies on EXPLAIN OUTPUT as well. Still,
we want to keep this test, so we should try to not parallelize this
test with such test.
pull/2509/head
Onder Kalaci 2018-11-30 13:58:27 +03:00
parent e2c4efbaa4
commit 18c9badff5
4 changed files with 286 additions and 77 deletions

View File

@ -1562,29 +1562,70 @@ SELECT create_distributed_table('partitioning_hash_join_test', 'id');
(1 row)
-- see the query plan without partition-wise join
EXPLAIN
SELECT success FROM run_command_on_workers('alter system set enable_mergejoin to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_nestloop to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_indexscan to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_indexonlyscan to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_partitionwise_join to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
success
---------
t
t
(2 rows)
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows=0 width=0)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Custom Scan (Citus Real-Time)
Task Count: 4
Tasks Shown: One of 4
-> Task
Node: host=localhost port=57637 dbname=regression
-> Merge Join (cost=563.58..752.73 rows=383 width=8)
Merge Cond: ((partitioning_hash_test.id = partitioning_hash_join_test.id) AND (partitioning_hash_test.subid = partitioning_hash_join_test.subid))
-> Merge Append (cost=0.43..123.59 rows=2262 width=8)
Sort Key: partitioning_hash_test.id, partitioning_hash_test.subid
-> Index Only Scan using partitioning_hash_test_0_1660016_pkey on partitioning_hash_test_0_1660016 partitioning_hash_test (cost=0.12..8.14 rows=1 width=8)
-> Index Only Scan using partitioning_hash_test_1_1660020_pkey on partitioning_hash_test_1_1660020 partitioning_hash_test_1 (cost=0.15..78.06 rows=2260 width=8)
-> Index Only Scan using partitioning_hash_test_2_1660032_pkey on partitioning_hash_test_2_1660032 partitioning_hash_test_2 (cost=0.12..8.14 rows=1 width=8)
-> Sort (cost=563.15..580.10 rows=6780 width=8)
Sort Key: partitioning_hash_join_test.id, partitioning_hash_join_test.subid
-> Append (cost=0.00..131.70 rows=6780 width=8)
-> Seq Scan on partitioning_hash_join_test_0_1660133 partitioning_hash_join_test (cost=0.00..32.60 rows=2260 width=8)
-> Seq Scan on partitioning_hash_join_test_1_1660137 partitioning_hash_join_test_1 (cost=0.00..32.60 rows=2260 width=8)
-> Seq Scan on partitioning_hash_join_test_2_1660141 partitioning_hash_join_test_2 (cost=0.00..32.60 rows=2260 width=8)
-> Gather
Workers Planned: 2
-> Parallel Hash Join
Hash Cond: ((partitioning_hash_join_test.id = partitioning_hash_test_1.id) AND (partitioning_hash_join_test.subid = partitioning_hash_test_1.subid))
-> Parallel Append
-> Parallel Seq Scan on partitioning_hash_join_test_0_1660133 partitioning_hash_join_test
-> Parallel Seq Scan on partitioning_hash_join_test_1_1660137 partitioning_hash_join_test_1
-> Parallel Seq Scan on partitioning_hash_join_test_2_1660141 partitioning_hash_join_test_2
-> Parallel Hash
-> Parallel Append
-> Parallel Seq Scan on partitioning_hash_test_1_1660020 partitioning_hash_test_1
-> Parallel Seq Scan on partitioning_hash_test_0_1660016 partitioning_hash_test
-> Parallel Seq Scan on partitioning_hash_test_2_1660032 partitioning_hash_test_2
(18 rows)
-- set partition-wise join on
@ -1603,64 +1644,88 @@ SELECT success FROM run_command_on_workers('select pg_reload_conf()');
(2 rows)
SET enable_partitionwise_join TO on;
-- see the new query plan
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows=0 width=0)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Custom Scan (Citus Real-Time)
Task Count: 4
Tasks Shown: One of 4
-> Task
Node: host=localhost port=57637 dbname=regression
-> Append (cost=1.02..367.91 rows=130 width=8)
-> Hash Join (cost=1.02..50.59 rows=1 width=8)
-> Append
-> Hash Join
Hash Cond: ((partitioning_hash_join_test.id = partitioning_hash_test.id) AND (partitioning_hash_join_test.subid = partitioning_hash_test.subid))
-> Seq Scan on partitioning_hash_join_test_0_1660133 partitioning_hash_join_test (cost=0.00..32.60 rows=2260 width=8)
-> Hash (cost=1.01..1.01 rows=1 width=8)
-> Seq Scan on partitioning_hash_test_0_1660016 partitioning_hash_test (cost=0.00..1.01 rows=1 width=8)
-> Merge Join (cost=158.66..266.09 rows=128 width=8)
Merge Cond: ((partitioning_hash_test_1.id = partitioning_hash_join_test_1.id) AND (partitioning_hash_test_1.subid = partitioning_hash_join_test_1.subid))
-> Index Only Scan using partitioning_hash_test_1_1660020_pkey on partitioning_hash_test_1_1660020 partitioning_hash_test_1 (cost=0.15..78.06 rows=2260 width=8)
-> Sort (cost=158.51..164.16 rows=2260 width=8)
Sort Key: partitioning_hash_join_test_1.id, partitioning_hash_join_test_1.subid
-> Seq Scan on partitioning_hash_join_test_1_1660137 partitioning_hash_join_test_1 (cost=0.00..32.60 rows=2260 width=8)
-> Hash Join (cost=1.02..50.59 rows=1 width=8)
-> Seq Scan on partitioning_hash_join_test_0_1660133 partitioning_hash_join_test
-> Hash
-> Seq Scan on partitioning_hash_test_0_1660016 partitioning_hash_test
-> Hash Join
Hash Cond: ((partitioning_hash_test_1.id = partitioning_hash_join_test_1.id) AND (partitioning_hash_test_1.subid = partitioning_hash_join_test_1.subid))
-> Seq Scan on partitioning_hash_test_1_1660020 partitioning_hash_test_1
-> Hash
-> Seq Scan on partitioning_hash_join_test_1_1660137 partitioning_hash_join_test_1
-> Hash Join
Hash Cond: ((partitioning_hash_join_test_2.id = partitioning_hash_test_2.id) AND (partitioning_hash_join_test_2.subid = partitioning_hash_test_2.subid))
-> Seq Scan on partitioning_hash_join_test_2_1660141 partitioning_hash_join_test_2 (cost=0.00..32.60 rows=2260 width=8)
-> Hash (cost=1.01..1.01 rows=1 width=8)
-> Seq Scan on partitioning_hash_test_2_1660032 partitioning_hash_test_2 (cost=0.00..1.01 rows=1 width=8)
(22 rows)
-> Seq Scan on partitioning_hash_join_test_2_1660141 partitioning_hash_join_test_2
-> Hash
-> Seq Scan on partitioning_hash_test_2_1660032 partitioning_hash_test_2
(21 rows)
-- note that partition-wise joins only work when partition key is in the join
-- following join does not have that, therefore join will not be pushed down to
-- partitions
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id);
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows=0 width=0)
---------------------------------------------------------------------------------------------------------
Custom Scan (Citus Real-Time)
Task Count: 4
Tasks Shown: One of 4
-> Task
Node: host=localhost port=57637 dbname=regression
-> Merge Join (cost=563.58..1842.63 rows=76682 width=12)
Merge Cond: (partitioning_hash_test.id = partitioning_hash_join_test.id)
-> Merge Append (cost=0.43..123.59 rows=2262 width=8)
Sort Key: partitioning_hash_test.id
-> Index Only Scan using partitioning_hash_test_0_1660016_pkey on partitioning_hash_test_0_1660016 partitioning_hash_test (cost=0.12..8.14 rows=1 width=8)
-> Index Only Scan using partitioning_hash_test_1_1660020_pkey on partitioning_hash_test_1_1660020 partitioning_hash_test_1 (cost=0.15..78.06 rows=2260 width=8)
-> Index Only Scan using partitioning_hash_test_2_1660032_pkey on partitioning_hash_test_2_1660032 partitioning_hash_test_2 (cost=0.12..8.14 rows=1 width=8)
-> Sort (cost=563.15..580.10 rows=6780 width=8)
Sort Key: partitioning_hash_join_test.id
-> Append (cost=0.00..131.70 rows=6780 width=8)
-> Seq Scan on partitioning_hash_join_test_0_1660133 partitioning_hash_join_test (cost=0.00..32.60 rows=2260 width=8)
-> Seq Scan on partitioning_hash_join_test_1_1660137 partitioning_hash_join_test_1 (cost=0.00..32.60 rows=2260 width=8)
-> Seq Scan on partitioning_hash_join_test_2_1660141 partitioning_hash_join_test_2 (cost=0.00..32.60 rows=2260 width=8)
(18 rows)
-> Hash Join
Hash Cond: (partitioning_hash_join_test.id = partitioning_hash_test.id)
-> Append
-> Seq Scan on partitioning_hash_join_test_0_1660133 partitioning_hash_join_test
-> Seq Scan on partitioning_hash_join_test_1_1660137 partitioning_hash_join_test_1
-> Seq Scan on partitioning_hash_join_test_2_1660141 partitioning_hash_join_test_2
-> Hash
-> Append
-> Seq Scan on partitioning_hash_test_0_1660016 partitioning_hash_test
-> Seq Scan on partitioning_hash_test_1_1660020 partitioning_hash_test_1
-> Seq Scan on partitioning_hash_test_2_1660032 partitioning_hash_test_2
(16 rows)
-- reset partition-wise join
SELECT success FROM run_command_on_workers('reset enable_partitionwise_join');
SELECT success FROM run_command_on_workers('alter system reset enable_partitionwise_join');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_mergejoin');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_nestloop');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_indexscan');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_indexonlyscan');
success
---------
t

View File

@ -1542,8 +1542,49 @@ SELECT create_distributed_table('partitioning_hash_join_test', 'id');
ERROR: relation "partitioning_hash_join_test" does not exist
LINE 1: SELECT create_distributed_table('partitioning_hash_join_test...
^
-- see the query plan without partition-wise join
EXPLAIN
SELECT success FROM run_command_on_workers('alter system set enable_mergejoin to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_nestloop to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_indexscan to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_indexonlyscan to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_partitionwise_join to off');
success
---------
f
f
(2 rows)
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
success
---------
t
t
(2 rows)
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
ERROR: relation "partitioning_hash_test" does not exist
LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
@ -1565,8 +1606,7 @@ SELECT success FROM run_command_on_workers('select pg_reload_conf()');
SET enable_partitionwise_join TO on;
ERROR: unrecognized configuration parameter "enable_partitionwise_join"
-- see the new query plan
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
ERROR: relation "partitioning_hash_test" does not exist
LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
@ -1574,19 +1614,47 @@ LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
-- note that partition-wise joins only work when partition key is in the join
-- following join does not have that, therefore join will not be pushed down to
-- partitions
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id);
ERROR: relation "partitioning_hash_test" does not exist
LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
^
-- reset partition-wise join
SELECT success FROM run_command_on_workers('reset enable_partitionwise_join');
SELECT success FROM run_command_on_workers('alter system reset enable_partitionwise_join');
success
---------
f
f
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_mergejoin');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_nestloop');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_indexscan');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_indexonlyscan');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
success
---------

View File

@ -1420,8 +1420,49 @@ SELECT create_distributed_table('partitioning_hash_join_test', 'id');
ERROR: relation "partitioning_hash_join_test" does not exist
LINE 1: SELECT create_distributed_table('partitioning_hash_join_test...
^
-- see the query plan without partition-wise join
EXPLAIN
SELECT success FROM run_command_on_workers('alter system set enable_mergejoin to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_nestloop to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_indexscan to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_indexonlyscan to off');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system set enable_partitionwise_join to off');
success
---------
f
f
(2 rows)
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
success
---------
t
t
(2 rows)
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
ERROR: relation "partitioning_hash_test" does not exist
LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
@ -1443,8 +1484,7 @@ SELECT success FROM run_command_on_workers('select pg_reload_conf()');
SET enable_partitionwise_join TO on;
ERROR: unrecognized configuration parameter "enable_partitionwise_join"
-- see the new query plan
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
ERROR: relation "partitioning_hash_test" does not exist
LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
@ -1452,19 +1492,47 @@ LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
-- note that partition-wise joins only work when partition key is in the join
-- following join does not have that, therefore join will not be pushed down to
-- partitions
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id);
ERROR: relation "partitioning_hash_test" does not exist
LINE 2: SELECT * FROM partitioning_hash_test JOIN partitioning_hash_...
^
-- reset partition-wise join
SELECT success FROM run_command_on_workers('reset enable_partitionwise_join');
SELECT success FROM run_command_on_workers('alter system reset enable_partitionwise_join');
success
---------
f
f
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_mergejoin');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_nestloop');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_indexscan');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('alter system reset enable_indexonlyscan');
success
---------
t
t
(2 rows)
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
success
---------

View File

@ -986,7 +986,6 @@ ORDER BY
COMMIT;
-- test partition-wise join
CREATE TABLE partitioning_hash_join_test(id int, subid int) PARTITION BY HASH(subid);
CREATE TABLE partitioning_hash_join_test_0 PARTITION OF partitioning_hash_join_test FOR VALUES WITH (MODULUS 3, REMAINDER 0);
CREATE TABLE partitioning_hash_join_test_1 PARTITION OF partitioning_hash_join_test FOR VALUES WITH (MODULUS 3, REMAINDER 1);
@ -994,8 +993,14 @@ CREATE TABLE partitioning_hash_join_test_2 PARTITION OF partitioning_hash_join_t
SELECT create_distributed_table('partitioning_hash_join_test', 'id');
-- see the query plan without partition-wise join
EXPLAIN
SELECT success FROM run_command_on_workers('alter system set enable_mergejoin to off');
SELECT success FROM run_command_on_workers('alter system set enable_nestloop to off');
SELECT success FROM run_command_on_workers('alter system set enable_indexscan to off');
SELECT success FROM run_command_on_workers('alter system set enable_indexonlyscan to off');
SELECT success FROM run_command_on_workers('alter system set enable_partitionwise_join to off');
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
-- set partition-wise join on
@ -1004,18 +1009,21 @@ SELECT success FROM run_command_on_workers('select pg_reload_conf()');
SET enable_partitionwise_join TO on;
-- see the new query plan
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
-- note that partition-wise joins only work when partition key is in the join
-- following join does not have that, therefore join will not be pushed down to
-- partitions
EXPLAIN
EXPLAIN (COSTS OFF)
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id);
-- reset partition-wise join
SELECT success FROM run_command_on_workers('reset enable_partitionwise_join');
SELECT success FROM run_command_on_workers('alter system reset enable_partitionwise_join');
SELECT success FROM run_command_on_workers('alter system reset enable_mergejoin');
SELECT success FROM run_command_on_workers('alter system reset enable_nestloop');
SELECT success FROM run_command_on_workers('alter system reset enable_indexscan');
SELECT success FROM run_command_on_workers('alter system reset enable_indexonlyscan');
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
RESET enable_partitionwise_join;