[FEAT MERGE] [CP] Improve the rowcount estimation
Co-authored-by: akaError <lzg020616@163.com>
This commit is contained in:
@ -1232,7 +1232,6 @@ bool ObDynamicSampling::all_ds_col_stats_are_gathered(const ObDSTableParam ¶
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user