HAWQ-1122. Add ORCA optimizer GUC optimizer_parallel_union for parallel append 
(#977)

This GUC is disabled by default.

Currently, when users run an `UNION ALL` query, such as
```sql
SELECT a FROM foo UNION ALL SELECT b FROM bar
```,
GPDB will parallelize the execution across all the segments, but the
table scans on `foo` and `bar` are not executed parallel. With this GUC
enabled, we add redistribution motion node under APPEND(UNION) operator,
which makes all the children of APPEND(UNION) operator execute in
parallel in every segment.

This is cherry-picked from 
greenplum-db/gpdb@86e49e51d39ed0d252cbf6a79c2fc62e36a4e307


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/e7bba170
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/e7bba170
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/e7bba170

Branch: refs/heads/master
Commit: e7bba17080139dd1f20d9d875947b62a2d543082
Parents: f0d891f
Author: Haisheng Yuan <hy...@pivotal.io>
Authored: Wed Jul 27 19:03:32 2016 -0500
Committer: rlei <r...@pivotal.io>
Committed: Fri Oct 28 11:52:20 2016 +0800

----------------------------------------------------------------------
 src/backend/gpopt/config/CConfigParamMapping.cpp |  7 +++++++
 src/backend/utils/misc/guc.c                     | 11 +++++++++++
 src/include/utils/guc.h                          |  1 +
 3 files changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e7bba170/src/backend/gpopt/config/CConfigParamMapping.cpp
----------------------------------------------------------------------
diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp 
b/src/backend/gpopt/config/CConfigParamMapping.cpp
index b7b0475..4a2073c 100644
--- a/src/backend/gpopt/config/CConfigParamMapping.cpp
+++ b/src/backend/gpopt/config/CConfigParamMapping.cpp
@@ -384,6 +384,13 @@ CConfigParamMapping::SConfigMappingElem 
CConfigParamMapping::m_elem[] =
                &optimizer_prefer_scalar_dqa_multistage_agg,
                false, // m_fNegate
                GPOS_WSZ_LIT("Prefer multistage aggregates for scalar distinct 
qualified aggregate in the optimizer.")
+               },
+
+               {
+               EopttraceEnableParallelAppend,
+               &optimizer_parallel_union,
+               false, // m_fNegate
+               GPOS_WSZ_LIT("Enable parallel execution for UNION/UNION ALL 
queries.")
                }
 };
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e7bba170/src/backend/utils/misc/guc.c
----------------------------------------------------------------------
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 2cdcb62..a936765 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -764,6 +764,7 @@ bool                optimizer_multilevel_partitioning;
 bool        optimizer_enable_derive_stats_all_groups;
 bool           optimizer_explain_show_status;
 bool           optimizer_prefer_scalar_dqa_multistage_agg;
+bool           optimizer_parallel_union;
 
 /* Security */
 bool           gp_reject_internal_tcp_conn = true;
@@ -4387,6 +4388,16 @@ static struct config_bool ConfigureNamesBool[] =
                true, NULL, NULL
        },
 
+       {
+               {"optimizer_parallel_union", PGC_USERSET, DEVELOPER_OPTIONS,
+                       gettext_noop("Enable parallel execution for UNION/UNION 
ALL queries."),
+                       NULL,
+                       GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
+               },
+               &optimizer_parallel_union,
+               false, NULL, NULL
+       },
+
        /* End-of-list marker */
        {
                {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/e7bba170/src/include/utils/guc.h
----------------------------------------------------------------------
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 41f7056..58b2b61 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -440,6 +440,7 @@ extern bool optimizer_multilevel_partitioning;
 extern bool optimizer_enable_derive_stats_all_groups;
 extern bool optimizer_explain_show_status;
 extern bool optimizer_prefer_scalar_dqa_multistage_agg;
+extern bool optimizer_parallel_union;
 
 /**
  * Enable logging of DPE match in optimizer.

Reply via email to