From b670be1fce91ffaec740ced05d698589698f5a96 Mon Sep 17 00:00:00 2001 From: Shreedhar Hardikar Date: Fri, 7 Jun 2019 18:01:10 -0500 Subject: [PATCH] Changes for ORCA commit: Skip CXformPushGbBelowSetOp when arity > threshold This commits adds a new GUC that controls the xform: optimizer_push_group_by_below_setop_threshold. Also bump ORCA version to 3.49.0 --- concourse/tasks/compile_gpdb.yml | 2 +- config/orca.m4 | 4 ++-- configure | 4 ++-- depends/conanfile_orca.txt | 2 +- src/backend/gpopt/utils/COptTasks.cpp | 4 +++- src/backend/utils/misc/guc_gp.c | 12 ++++++++++++ src/include/utils/guc.h | 1 + 7 files changed, 22 insertions(+), 7 deletions(-) diff --git a/concourse/tasks/compile_gpdb.yml b/concourse/tasks/compile_gpdb.yml index 4a32abee9e..38b063e62e 100644 --- a/concourse/tasks/compile_gpdb.yml +++ b/concourse/tasks/compile_gpdb.yml @@ -19,4 +19,4 @@ params: BLD_TARGETS: OUTPUT_ARTIFACT_DIR: gpdb_artifacts CONFIGURE_FLAGS: - ORCA_TAG: v3.48.0 + ORCA_TAG: v3.49.0 diff --git a/config/orca.m4 b/config/orca.m4 index 3d23fd03e4..62277e8717 100644 --- a/config/orca.m4 +++ b/config/orca.m4 @@ -40,10 +40,10 @@ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include ]], [ -return strncmp("3.48.", GPORCA_VERSION_STRING, 5); +return strncmp("3.49.", GPORCA_VERSION_STRING, 5); ])], [AC_MSG_RESULT([[ok]])], -[AC_MSG_ERROR([Your ORCA version is expected to be 3.48.XXX])] +[AC_MSG_ERROR([Your ORCA version is expected to be 3.49.XXX])] ) AC_LANG_POP([C++]) ])# PGAC_CHECK_ORCA_VERSION diff --git a/configure b/configure index 5f7bb32f08..60806153a4 100755 --- a/configure +++ b/configure @@ -13995,7 +13995,7 @@ int main () { -return strncmp("3.48.", GPORCA_VERSION_STRING, 5); +return strncmp("3.49.", GPORCA_VERSION_STRING, 5); ; return 0; @@ -14005,7 +14005,7 @@ if ac_fn_cxx_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else - as_fn_error $? "Your ORCA version is expected to be 3.48.XXX" "$LINENO" 5 + as_fn_error $? "Your ORCA version is expected to be 3.49.XXX" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ diff --git a/depends/conanfile_orca.txt b/depends/conanfile_orca.txt index e2571c5872..49d0582ccb 100644 --- a/depends/conanfile_orca.txt +++ b/depends/conanfile_orca.txt @@ -1,5 +1,5 @@ [requires] -orca/v3.48.0@gpdb/stable +orca/v3.49.0@gpdb/stable [imports] include, * -> build/include diff --git a/src/backend/gpopt/utils/COptTasks.cpp b/src/backend/gpopt/utils/COptTasks.cpp index dcfeedabf5..58530769cc 100644 --- a/src/backend/gpopt/utils/COptTasks.cpp +++ b/src/backend/gpopt/utils/COptTasks.cpp @@ -450,6 +450,7 @@ COptTasks::CreateOptimizerConfig ULONG array_expansion_threshold = (ULONG) optimizer_array_expansion_threshold; ULONG join_order_threshold = (ULONG) optimizer_join_order_threshold; ULONG broadcast_threshold = (ULONG) optimizer_penalize_broadcast_threshold; + ULONG push_group_by_below_setop_threshold = (ULONG) optimizer_push_group_by_below_setop_threshold; return GPOS_NEW(mp) COptimizerConfig ( @@ -464,8 +465,9 @@ COptTasks::CreateOptimizerConfig array_expansion_threshold, join_order_threshold, broadcast_threshold, - false /* don't create Assert nodes for constraints, we'll + false, /* don't create Assert nodes for constraints, we'll * enforce them ourselves in the executor */ + push_group_by_below_setop_threshold ), GPOS_NEW(mp) CWindowOids(OID(F_WINDOW_ROW_NUMBER), OID(F_WINDOW_RANK)) ); diff --git a/src/backend/utils/misc/guc_gp.c b/src/backend/utils/misc/guc_gp.c index fd90e30377..6368fac51b 100644 --- a/src/backend/utils/misc/guc_gp.c +++ b/src/backend/utils/misc/guc_gp.c @@ -377,6 +377,7 @@ int optimizer_array_expansion_threshold; int optimizer_join_order_threshold; int optimizer_join_order; int optimizer_cte_inlining_bound; +int optimizer_push_group_by_below_setop_threshold; bool optimizer_force_multistage_agg; bool optimizer_force_three_stage_scalar_dqa; bool optimizer_force_expanded_distinct_aggs; @@ -4034,6 +4035,17 @@ struct config_int ConfigureNamesInt_gp[] = NULL, NULL, NULL }, + { + {"optimizer_push_group_by_below_setop_threshold", PGC_USERSET, QUERY_TUNING_METHOD, + gettext_noop("Maximum number of children setops have to consider pushing group bys below it"), + NULL, + GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + }, + &optimizer_push_group_by_below_setop_threshold, + 10, 0, INT_MAX, + NULL, NULL, NULL + }, + { {"optimizer_join_order_threshold", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Maximum number of join children to use dynamic programming based join ordering algorithm."), diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 03b9325103..090f98cb6b 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -503,6 +503,7 @@ extern int optimizer_join_order_threshold; extern int optimizer_join_order; extern int optimizer_join_arity_for_associativity_commutativity; extern int optimizer_cte_inlining_bound; +extern int optimizer_push_group_by_below_setop_threshold; extern bool optimizer_force_multistage_agg; extern bool optimizer_force_three_stage_scalar_dqa; extern bool optimizer_force_expanded_distinct_aggs; -- GitLab