[FEAT MERGE] [CP] Improve the rowcount estimation

Co-authored-by: akaError <lzg020616@163.com>
This commit is contained in:
xianyu-w
2024-02-09 19:58:18 +00:00
committed by ob-robot
parent da232dc640
commit dc32079645
70 changed files with 5953 additions and 3722 deletions

View File

@ -1232,7 +1232,6 @@ bool ObDynamicSampling::all_ds_col_stats_are_gathered(const ObDSTableParam &para
int ObDynamicSamplingUtils::get_valid_dynamic_sampling_level(const ObSQLSessionInfo *session_info,
const ObTableDynamicSamplingHint *table_ds_hint,
const int64_t global_ds_level,
bool has_opt_stat,
int64_t &ds_level,
int64_t &sample_block_cnt,
bool &specify_ds)
@ -1258,7 +1257,7 @@ int ObDynamicSamplingUtils::get_valid_dynamic_sampling_level(const ObSQLSessionI
LOG_WARN("get unexpected null", K(ret), K(session_info));
} else if (session_info->is_user_session() && OB_FAIL(session_info->get_opt_dynamic_sampling(session_ds_level))) {
LOG_WARN("failed to get opt dynamic sampling level", K(ret));
} else if (session_ds_level == ObDynamicSamplingLevel::BASIC_DYNAMIC_SAMPLING && !has_opt_stat) {
} else if (session_ds_level == ObDynamicSamplingLevel::BASIC_DYNAMIC_SAMPLING) {
ds_level = session_ds_level;
}
LOG_TRACE("get valid dynamic sampling level", KPC(table_ds_hint), K(global_ds_level), K(specify_ds),
@ -1269,7 +1268,6 @@ int ObDynamicSamplingUtils::get_valid_dynamic_sampling_level(const ObSQLSessionI
int ObDynamicSamplingUtils::get_ds_table_param(ObOptimizerContext &ctx,
const ObLogPlan *log_plan,
const OptTableMeta *table_meta,
bool ignore_opt_stat,
ObDSTableParam &ds_table_param,
bool &specify_ds)
{
@ -1282,16 +1280,15 @@ int ObDynamicSamplingUtils::get_ds_table_param(ObOptimizerContext &ctx,
OB_ISNULL(table_item = log_plan->get_stmt()->get_table_item_by_id(table_meta->get_table_id()))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret), K(log_plan), KPC(table_meta), KPC(table_item));
} else if (!log_plan->get_stmt()->is_select_stmt() || ctx.use_default_stat()) {
//do nothing
} else if (is_virtual_table(table_meta->get_ref_table_id()) && !is_ds_virtual_table(table_meta->get_ref_table_id())) {
//do nothing
} else if (table_meta->get_table_type() == EXTERNAL_TABLE) {
//do nothing TODO [EXTERNAL TABLE]
} else if (OB_UNLIKELY(!log_plan->get_stmt()->is_select_stmt()) ||
OB_UNLIKELY(ctx.use_default_stat()) ||
OB_UNLIKELY(is_virtual_table(table_meta->get_ref_table_id()) && !is_ds_virtual_table(table_meta->get_ref_table_id())) ||
OB_UNLIKELY(table_meta->get_table_type() == EXTERNAL_TABLE)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected param", K(ret), K(log_plan), KPC(table_meta), KPC(table_item));
} else if (OB_FAIL(get_valid_dynamic_sampling_level(ctx.get_session_info(),
log_plan->get_log_plan_hint().get_dynamic_sampling_hint(table_meta->get_table_id()),
ctx.get_global_hint().get_dynamic_sampling(),
ignore_opt_stat ? false : table_meta->use_opt_stat(),
ds_level,
sample_block_cnt,
specify_ds))) {
@ -1324,6 +1321,9 @@ int ObDynamicSamplingUtils::get_ds_table_param(ObOptimizerContext &ctx,
ds_table_param.table_name_ = table_item->table_name_;
ds_table_param.alias_name_ = table_item->alias_name_;
}
} else {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get invalid ds level", K(ret), K(ds_level));
}
return ret;
}