Re: [HACKERS] Partition-wise aggregation/grouping
Rafia Sabih <rafia.sabih@enterprisedb.com>
Attachments
- partitioning.zip (application/zip)
On Thu, Feb 8, 2018 at 6:35 PM, Jeevan Chalke < jeevan.chalke@enterprisedb.com> wrote: > Hi, > > In this attached version, I have rebased my changes over new design of > partially_grouped_rel. The preparatory changes of adding > partially_grouped_rel are in 0001. > > Also to minimize finalization code duplication, I have refactored them > into two separate functions, finalize_sorted_partial_agg_path() and > finalize_hashed_partial_agg_path(). I need to create these two functions > as current path creation order in like, > Sort Agg Path > Sort Agg Path - Parallel Aware (Finalization needed here) > Hash Agg Path > Hash Agg Path - Parallel Aware (Finalization needed here) > And if we club those finalizations together, then path creation order will > be changed and it may result in the existing plan changes. > Let me know if that's OK, I will merge them together as they are distinct > anyways. These changes are part of 0002. > > 0003 - 0006 are refactoring patches as before. > > 0007 is the main patch per new design. I have removed > create_partition_agg_paths() altogether as finalization code is reused. > Also, renamed preferFullAgg with forcePartialAgg as we forcefully needed a > partial path from nested level if the parent is doing a partial > aggregation. add_single_path_to_append_rel() is no more exists and also > there is no need to pass OtherUpperPathExtraData to > add_paths_to_append_rel(). > > 0008 - 0009, testcase and postgres_fdw changes. > > Please have a look at new changes and let me know if I missed any. > > Thanks > I was testing this patch for TPC-H benchmarking and came across following results, Q1 completes in 229 secs with patch and in 66 secs without it. It looks like with this patch the time of parallel seq scan itself is elevated for some of the partitions. Notice for partitions, lineitem_3, lineitem_7, lineitem_10, and linietem_5 it is some 13 secs which was somewhere around 5 secs on head. Q6 completes in some 7 secs with patch and it takes 4 secs without it. This is mainly caused because with the new parallel append, the parallel operator below it (parallel index scan in this case) is not used, however, on head it was the append of all the parallel index scans, which was saving quite some time. Q18 takes some 390 secs with patch and some 147 secs without it. The experimental setup for these tests is as follows, work_mem = 500MB shared_buffers = 10GB effective_cache_size = 4GB seq_page_cost = random+page_cost = 0.01 enable_partition_wise_join = off Partitioning info: Total 10 partitions on tables - lineitem and orders each with partitioning key being l_orderkey and o_orderkey respectively. Please find the attached file for explain analyse outputs of each of the reported query. -- Regards, Rafia Sabih EnterpriseDB: http://www.enterprisedb.com/
Commits
-
postgres_fdw: Push down partition-wise aggregation.
- 7e0d64c7a57e 11.0 landed
-
Remove 'target' from GroupPathExtraData.
- c1de1a3a8b93 11.0 landed
-
Implement partition-wise grouping/aggregation.
- e2f1eb0ee30d 11.0 landed
-
Don't pass the grouping target around unnecessarily.
- 94150513ec12 11.0 landed
-
Determine grouping strategies in create_grouping_paths.
- b5996c2791f3 11.0 landed
-
Defer creation of partially-grouped relation until it's needed.
- 4f15e5d09de2 11.0 landed
-
Split create_grouping_paths into degenerate and non-degenerate cases.
- 1466bcfa4a83 11.0 landed
-
Pass additional arguments to a couple of grouping-related functions.
- 648a6c7bd815 11.0 landed
-
Fix logic error in add_paths_to_partial_grouping_rel.
- 3bfe957761ac 11.0 landed
-
Minor cleanup of code related to partially_grouped_rel.
- 5e6a63c0d102 11.0 landed
-
Add a new upper planner relation for partially-aggregated results.
- 3bf05e096b9f 11.0 landed
-
Charge cpu_tuple_cost * 0.5 for Append and MergeAppend nodes.
- 7d8ac9814bc9 11.0 landed
-
Rename enable_partition_wise_join to enable_partitionwise_join
- 2fb1abaeb016 11.0 cited
-
Factor some code out of create_grouping_paths.
- 9fd8b7d63257 11.0 landed
-
Pad XLogReaderState's main_data buffer more aggressively.
- 8735978e7aeb 11.0 cited
-
Prevent int128 from requiring more than MAXALIGN alignment.
- 7518049980be 11.0 cited
-
Fix DROP SUBSCRIPTION hang
- 8edacab20995 11.0 cited
-
Inject $(ICU_LIBS) regardless of platform.
- 66ed3829df95 11.0 cited
-
Some preliminary refactoring towards partitionwise join.
- c44c47a773bd 10.0 cited