Modify the default value of the better_inlist optimization configuration item to True

This commit is contained in:
zzg19950727
2023-09-14 02:10:40 +00:00
committed by ob-robot
parent 3f0fe546ff
commit 8f2327f912
3 changed files with 36 additions and 3 deletions

View File

@ -1599,7 +1599,7 @@ ERRSIM_DEF_TIME(errsim_transfer_backfill_error_time, OB_TENANT_PARAMETER, "0", "
DEF_TIME(_stall_threshold_for_dynamic_worker, OB_TENANT_PARAMETER, "3ms", "[0ms,)",
"threshold of dynamic worker works",
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
DEF_BOOL(_optimizer_better_inlist_costing, OB_TENANT_PARAMETER, "False",
DEF_BOOL(_optimizer_better_inlist_costing, OB_TENANT_PARAMETER, "True",
"enable improved costing of index access using in-list(s)",
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
DEF_BOOL(_optimizer_skip_scan_enabled, OB_TENANT_PARAMETER, "False",

View File

@ -926,7 +926,8 @@ int ObJoinOrder::get_query_range_info(const uint64_t table_id,
? agent_table_filter
: helper.filters_,
range_info.get_expr_constraints(),
query_range))) {
table_id,
query_range))) {
LOG_WARN("failed to extract query range", K(ret), K(index_id));
} else if (is_geo_index && OB_FAIL(extract_geo_preliminary_query_range(range_columns,
is_oracle_inner_index_table
@ -3169,6 +3170,7 @@ int ObJoinOrder::check_exprs_overlap_index(const ObIArray<ObRawExpr*>& quals,
int ObJoinOrder::extract_preliminary_query_range(const ObIArray<ColumnItem> &range_columns,
const ObIArray<ObRawExpr*> &predicates,
ObIArray<ObExprConstraint> &expr_constraints,
int64_t table_id,
ObQueryRange *&query_range)
{
int ret = OB_SUCCESS;
@ -3191,7 +3193,7 @@ int ObJoinOrder::extract_preliminary_query_range(const ObIArray<ColumnItem> &ran
if (OB_ISNULL(tmp_ptr)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("failed to allocate memory for query range", K(ret));
} else if (session_info->is_better_inlist_enabled(enable_better_inlist)) {
} else if (OB_FAIL(check_enable_better_inlist(table_id, enable_better_inlist))) {
LOG_WARN("failed to check better inlist enabled", K(ret));
} else if (enable_better_inlist &&
OB_FAIL(get_candi_range_expr(range_columns,
@ -3230,6 +3232,34 @@ int ObJoinOrder::extract_preliminary_query_range(const ObIArray<ColumnItem> &ran
return ret;
}
int ObJoinOrder::check_enable_better_inlist(int64_t table_id, bool &enable)
{
int ret = OB_SUCCESS;
enable = false;
ObOptimizerContext *opt_ctx = NULL;
ObSQLSessionInfo *session_info = NULL;
OptTableMeta *table_meta = NULL;
if (OB_ISNULL(get_plan()) ||
OB_ISNULL(opt_ctx = &get_plan()->get_optimizer_context()) ||
OB_ISNULL(session_info = opt_ctx->get_session_info())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("get unexpected null", K(get_plan()), K(opt_ctx), K(ret));
} else if (!session_info->is_user_session()) {
enable = false;
} else if (session_info->is_better_inlist_enabled(enable)) {
LOG_WARN("failed to check better inlist enabled", K(ret));
} else if (!enable) {
//do nothing
} else if (OB_ISNULL(table_meta=get_plan()->get_basic_table_metas().
get_table_meta_by_table_id(table_id))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpect null table meta", K(ret));
} else if (table_meta->use_default_stat()) {
enable = false;
}
return ret;
}
int ObJoinOrder::extract_geo_preliminary_query_range(const ObIArray<ColumnItem> &range_columns,
const ObIArray<ObRawExpr*> &predicates,
const ColumnIdInfoMap &column_schema_info,

View File

@ -1591,8 +1591,11 @@ struct NullAwareAntiJoinInfo {
int extract_preliminary_query_range(const common::ObIArray<ColumnItem> &range_columns,
const common::ObIArray<ObRawExpr*> &predicates,
ObIArray<ObExprConstraint> &expr_constraints,
int64_t table_id,
ObQueryRange* &range);
int check_enable_better_inlist(int64_t table_id, bool &enable);
int get_candi_range_expr(const ObIArray<ColumnItem> &range_columns,
const ObIArray<ObRawExpr*> &predicates,
ObIArray<ObRawExpr*> &range_predicates);