Re: Partition-wise join for join between (declaratively) partitioned tables
Rafia Sabih <rafia.sabih@enterprisedb.com>
Attachments
- pg_unpart.zip (application/zip)
On Tue, Sep 19, 2017 at 2:58 PM, Rafia Sabih <rafia.sabih@enterprisedb.com> wrote: > On Fri, Sep 15, 2017 at 2:09 PM, Rafia Sabih > <rafia.sabih@enterprisedb.com> wrote: >>> >> On TPC-H benchmarking of this patch, I found a regression in Q7. It >> was taking some 1500s with the patch and some 900s without the patch. >> Please find the attached pwd_reg.zip for the output of explain analyse >> on head and with patch. >> >> The experimental settings used were, >> commit-id = 0c504a80cf2e6f66df2cdea563e879bf4abd1629 >> patch-version = v26 >> >> Server settings: >> work_mem = 1GB >> shared_buffers = 10GB >> effective_cache_size = 10GB >> max_parallel_workers_per_gather = 4 >> >> Partitioning information: >> Partitioning scheme = by range >> Number of partitions in lineitem and orders table = 106 >> partition key for lineitem = l_orderkey >> partition key for orders = o_orderkey >> >> Apart from these there is a regression case on a custom table, on head >> query completes in 20s and with this patch it takes 27s. Please find >> the attached .out and .sql file for the output and schema for the test >> case respectively. I have reported this case before (sometime around >> March this year) as well, but I am not sure if it was overlooked or is >> an unimportant and expected behaviour for some reason. >> > > On completing the benchmark for all queries for the above mentioned > setup, following performance improvement can be seen, > Query | Patch | Head > 3 | 1455 | 1631 > 4 | 499 | 4344 > 5 | 1464 | 1606 > 10 | 1475 | 1599 > 12 | 1465 | 1790 > > Note that all values of execution time are in seconds. I compared this experiment with non-partitioned database and following is the result, Query | Non-partitioned head 3 | 1752 4 | 315 5 | 2319 10 | 1535 12 | 1739 In summary, the query that appears slowest in partitioned database is not so otherwise. It is good to see that in Q4 partition-wise join helps in achieving performance closer to it's non-partitioned case, otherwise partitioning alone causes it to suffer greatly. Apart from Q4 it does not looks like partitioning hurts anywhere else, though the maximum improvement is ~35% for Q5. Another point to note here is that the performance on partitioned and unpartitioned heads are quite close (except Q4) which is something atleast I wasn't expecting. It looks like we need not to partition the tables anyway, or atleast this set of queries doesn't benefit from partitioning. Please let me know if somebody has better ideas on how partitioning schemes should be applied to make it more beneficial for these queries. -- Regards, Rafia Sabih EnterpriseDB: http://www.enterprisedb.com/
Commits
-
Add test for partitionwise join involving default partition.
- 4513d3a4be0b 12.0 landed
-
Rewrite the code that applies scan/join targets to paths.
- 11cf92f6e2e1 11.0 cited
-
Fix code related to partitioning schemes for dropped columns.
- cf7ab13bfb45 11.0 landed
-
Copy information from the relcache instead of pointing to it.
- 45866c75507f 11.0 landed
-
Basic partition-wise join functionality.
- f49842d1ee31 11.0 landed
-
Associate partitioning information with each RelOptInfo.
- 9140cf8269b0 11.0 landed
-
Expand partitioned table RTEs level by level, without flattening.
- 0a480502b092 11.0 landed
-
Set partitioned_rels appropriately when UNION ALL is used.
- 448aa36e8b96 10.0 landed
- 1555566d9ee1 11.0 landed
-
Remove dedicated B-tree root-split record types.
- 0c504a80cf2e 11.0 cited
-
Assorted preparatory refactoring for partition-wise join.
- e139f1953f29 11.0 cited
-
Teach adjust_appendrel_attrs(_multilevel) to do multiple translations.
- 480f1f4329f1 11.0 cited
-
Avoid unnecessary single-child Append nodes.
- d57929afc706 11.0 cited
-
Revisit handling of UNION ALL subqueries with non-Var output columns.
- dd4134ea56cb 9.2.0 cited