diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index 08abf8a14f..22ec1dfee1 100644 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -1311,6 +1311,9 @@ DEF_INT(open_cursors, OB_TENANT_PARAMETER, "50", "[0,65535]", DEF_BOOL(_enable_px_batch_rescan, OB_TENANT_PARAMETER, "True", "enable px batch rescan for nlj or subplan filter", ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); +DEF_BOOL(_enable_spf_batch_rescan, OB_TENANT_PARAMETER, "False", + "enable das batch rescan for subplan filter", + ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_INT(_parallel_max_active_sessions, OB_TENANT_PARAMETER, "0", "[0,]", "max active parallel sessions allowed for tenant. Range: [0,+∞)", diff --git a/src/sql/engine/subquery/ob_subplan_filter_op.cpp b/src/sql/engine/subquery/ob_subplan_filter_op.cpp index 6ab37b23d3..2e472757a2 100644 --- a/src/sql/engine/subquery/ob_subplan_filter_op.cpp +++ b/src/sql/engine/subquery/ob_subplan_filter_op.cpp @@ -535,6 +535,7 @@ int ObSubPlanFilterOp::rescan() //We do not need alloc memory again in rescan. //das_batch_params_.reset(); current_group_ = 0; + brs_holder_.reset(); } if (OB_SUCC(ret) && enable_left_px_batch_) { diff --git a/src/sql/ob_optimizer_trace_impl.cpp b/src/sql/ob_optimizer_trace_impl.cpp index ff9f0e74e5..e4ace2cb55 100644 --- a/src/sql/ob_optimizer_trace_impl.cpp +++ b/src/sql/ob_optimizer_trace_impl.cpp @@ -895,6 +895,7 @@ int ObOptimizerTraceImpl::trace_parameters() //for tenant parameters TRACE_PARAMETER(_rowsets_enabled, bool); TRACE_PARAMETER(_enable_px_batch_rescan, bool); + TRACE_PARAMETER(_enable_spf_batch_rescan, bool); TRACE_PARAMETER(_hash_join_enabled, bool); TRACE_PARAMETER(_optimizer_sortmerge_join_enabled, bool); TRACE_PARAMETER(_nested_loop_join_enabled, bool); diff --git a/src/sql/optimizer/ob_log_subplan_filter.cpp b/src/sql/optimizer/ob_log_subplan_filter.cpp index b5d15a5db2..7d5aaa7630 100644 --- a/src/sql/optimizer/ob_log_subplan_filter.cpp +++ b/src/sql/optimizer/ob_log_subplan_filter.cpp @@ -537,6 +537,15 @@ int ObLogSubPlanFilter::check_and_set_das_group_rescan() LOG_WARN("unexpected null", K(ret)); } else if (OB_FAIL(session_info->get_nlj_batching_enabled(enable_das_group_rescan_))) { LOG_WARN("failed to get enable batch variable", K(ret)); + } else { + omt::ObTenantConfigGuard tenant_config(TENANT_CONF(session_info->get_effective_tenant_id())); + if (tenant_config.is_valid()) { + enable_das_group_rescan_ = tenant_config->_enable_spf_batch_rescan; + LOG_TRACE("trace disable hash groupby in second stage for three-stage", + K(enable_das_group_rescan_)); + } else { + enable_das_group_rescan_ = false; + } } // check use batch for (int64_t i = 1; OB_SUCC(ret) && enable_das_group_rescan_ && i < get_num_of_child(); i++) { diff --git a/src/sql/plan_cache/ob_plan_cache_util.cpp b/src/sql/plan_cache/ob_plan_cache_util.cpp index bc08536cf1..e00cca5bb8 100644 --- a/src/sql/plan_cache/ob_plan_cache_util.cpp +++ b/src/sql/plan_cache/ob_plan_cache_util.cpp @@ -407,6 +407,7 @@ int ObConfigInfoInPC::load_influence_plan_config() px_join_skew_handling_ = tenant_config->_px_join_skew_handling; px_join_skew_minfreq_ = static_cast(tenant_config->_px_join_skew_minfreq); min_cluster_version_ = GET_MIN_CLUSTER_VERSION(); + enable_spf_batch_rescan_ = tenant_config->_enable_spf_batch_rescan; enable_var_assign_use_das_ = tenant_config->_enable_var_assign_use_das; } @@ -454,6 +455,9 @@ int ObConfigInfoInPC::serialize_configs(char *buf, int buf_len, int64_t &pos) } else if (OB_FAIL(databuff_printf(buf, buf_len, pos, "%d", is_enable_px_fast_reclaim_))) { SQL_PC_LOG(WARN, "failed to databuff_printf", K(ret), K(is_enable_px_fast_reclaim_)); + } else if (OB_FAIL(databuff_printf(buf, buf_len, pos, + "%d", enable_spf_batch_rescan_))) { + SQL_PC_LOG(WARN, "failed to databuff_printf", K(ret), K(enable_spf_batch_rescan_)); } else if (OB_FAIL(databuff_printf(buf, buf_len, pos, "%d", enable_var_assign_use_das_))) { SQL_PC_LOG(WARN, "failed to databuff_printf", K(ret), K(enable_var_assign_use_das_)); diff --git a/src/sql/plan_cache/ob_plan_cache_util.h b/src/sql/plan_cache/ob_plan_cache_util.h index b4f86bd38c..b62b85fe89 100644 --- a/src/sql/plan_cache/ob_plan_cache_util.h +++ b/src/sql/plan_cache/ob_plan_cache_util.h @@ -1004,6 +1004,7 @@ public: px_join_skew_minfreq_(30), min_cluster_version_(0), is_enable_px_fast_reclaim_(false), + enable_spf_batch_rescan_(false), enable_var_assign_use_das_(false), cluster_config_version_(-1), tenant_config_version_(-1), @@ -1046,6 +1047,7 @@ public: int8_t px_join_skew_minfreq_; uint64_t min_cluster_version_; bool is_enable_px_fast_reclaim_; + bool enable_spf_batch_rescan_; bool enable_var_assign_use_das_; private: diff --git a/tools/deploy/init_for_ce.sql b/tools/deploy/init_for_ce.sql index 5cb7ae79a3..547118a766 100644 --- a/tools/deploy/init_for_ce.sql +++ b/tools/deploy/init_for_ce.sql @@ -47,4 +47,7 @@ alter system set_tp tp_no = 551, error_code = 5434, frequency = 1; alter system set _enable_var_assign_use_das = true tenant = sys; alter system set _enable_var_assign_use_das = true tenant = all_user; -alter system set _enable_var_assign_use_das = true tenant = all_meta; \ No newline at end of file +alter system set _enable_var_assign_use_das = true tenant = all_meta; +alter system set _enable_spf_batch_rescan = true tenant = sys; +alter system set _enable_spf_batch_rescan = true tenant = all_user; +alter system set _enable_spf_batch_rescan = true tenant = all_meta; \ No newline at end of file diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result index 923878f568..ac2002f5ed 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result @@ -302,6 +302,7 @@ _enable_range_extraction_for_not_in _enable_reserved_user_dcl_restriction _enable_resource_limit_spec _enable_skip_index +_enable_spf_batch_rescan _enable_system_tenant_memory_limit _enable_tenant_sql_net_thread _enable_trace_session_leak