From 098ebfbf83cbd89c7e88942e4fc9e2e80c661bc7 Mon Sep 17 00:00:00 2001 From: wjhh2008 Date: Fri, 20 Oct 2023 13:09:43 +0000 Subject: [PATCH] Disable dynamic sampling for external table --- src/sql/optimizer/ob_dynamic_sampling.cpp | 2 ++ src/sql/optimizer/ob_join_order.cpp | 1 + src/sql/optimizer/ob_opt_selectivity.cpp | 4 +++- src/sql/optimizer/ob_opt_selectivity.h | 8 +++++++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/sql/optimizer/ob_dynamic_sampling.cpp b/src/sql/optimizer/ob_dynamic_sampling.cpp index 6eeea59a7..01b1e0dd6 100644 --- a/src/sql/optimizer/ob_dynamic_sampling.cpp +++ b/src/sql/optimizer/ob_dynamic_sampling.cpp @@ -1284,6 +1284,8 @@ int ObDynamicSamplingUtils::get_ds_table_param(ObOptimizerContext &ctx, //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_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(), diff --git a/src/sql/optimizer/ob_join_order.cpp b/src/sql/optimizer/ob_join_order.cpp index 1217c261e..607a01035 100644 --- a/src/sql/optimizer/ob_join_order.cpp +++ b/src/sql/optimizer/ob_join_order.cpp @@ -11905,6 +11905,7 @@ int ObJoinOrder::init_est_sel_info_for_access_path(const uint64_t table_id, get_plan()->get_selectivity_ctx(), table_id, ref_table_id, + table_schema.get_table_type(), table_meta_info_.table_row_count_, all_used_part_id, all_used_tablet_id, diff --git a/src/sql/optimizer/ob_opt_selectivity.cpp b/src/sql/optimizer/ob_opt_selectivity.cpp index 856b34ce0..ead71ac54 100644 --- a/src/sql/optimizer/ob_opt_selectivity.cpp +++ b/src/sql/optimizer/ob_opt_selectivity.cpp @@ -88,6 +88,7 @@ int OptTableMeta::assign(const OptTableMeta &other) int OptTableMeta::init(const uint64_t table_id, const uint64_t ref_table_id, + const ObTableType table_type, const int64_t rows, const OptTableStatType stat_type, ObSqlSchemaGuard &schema_guard, @@ -247,6 +248,7 @@ int OptTableMetas::copy_table_meta_info(const OptTableMetas &table_metas, const int OptTableMetas::add_base_table_meta_info(OptSelectivityCtx &ctx, const uint64_t table_id, const uint64_t ref_table_id, + const ObTableType table_type, const int64_t rows, ObIArray &all_used_part_id, ObIArray &all_used_tablets, @@ -265,7 +267,7 @@ int OptTableMetas::add_base_table_meta_info(OptSelectivityCtx &ctx, } else if (OB_ISNULL(table_meta = table_metas_.alloc_place_holder())) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("failed to allocate place holder for table meta", K(ret)); - } else if (OB_FAIL(table_meta->init(table_id, ref_table_id, rows, stat_type, + } else if (OB_FAIL(table_meta->init(table_id, ref_table_id, table_type, rows, stat_type, *schema_guard, all_used_part_id, all_used_tablets, column_ids, all_used_global_parts, scale_ratio, ctx))) { LOG_WARN("failed to init new tstat", K(ret)); diff --git a/src/sql/optimizer/ob_opt_selectivity.h b/src/sql/optimizer/ob_opt_selectivity.h index f40322d7f..a0c2db8a7 100644 --- a/src/sql/optimizer/ob_opt_selectivity.h +++ b/src/sql/optimizer/ob_opt_selectivity.h @@ -219,6 +219,7 @@ public: OptTableMeta() : table_id_(OB_INVALID_ID), ref_table_id_(OB_INVALID_ID), + table_type_(share::schema::MAX_TABLE_TYPE), rows_(0), stat_type_(OptTableStatType::DEFAULT_TABLE_STAT), last_analyzed_(0), @@ -234,6 +235,7 @@ public: int init(const uint64_t table_id, const uint64_t ref_table_id, + const share::schema::ObTableType table_type, const int64_t rows, const OptTableStatType stat_type, ObSqlSchemaGuard &schema_guard, @@ -282,12 +284,15 @@ public: bool use_ds_stat() const { return stat_type_ == OptTableStatType::DS_TABLE_STAT; } void set_use_ds_stat() { stat_type_ = OptTableStatType::DS_TABLE_STAT; } - TO_STRING_KV(K_(table_id), K_(ref_table_id), K_(rows), K_(stat_type), K_(ds_level), + share::schema::ObTableType get_table_type() const { return table_type_; } + + TO_STRING_KV(K_(table_id), K_(ref_table_id), K_(table_type), K_(rows), K_(stat_type), K_(ds_level), K_(all_used_parts), K_(all_used_tablets), K_(pk_ids), K_(column_metas), K_(all_used_global_parts), K_(scale_ratio)); private: uint64_t table_id_; uint64_t ref_table_id_; + const share::schema::ObTableType table_type_; double rows_; OptTableStatType stat_type_; int64_t last_analyzed_; @@ -321,6 +326,7 @@ public: int add_base_table_meta_info(OptSelectivityCtx &ctx, const uint64_t table_id, const uint64_t ref_table_id, + const share::schema::ObTableType table_type, const int64_t rows, common::ObIArray &all_used_part_id, common::ObIArray &all_used_tablets,