diff --git a/src/sql/engine/aggregate/ob_aggregate_function.cpp b/src/sql/engine/aggregate/ob_aggregate_function.cpp index f446d9487d..e887e66d21 100644 --- a/src/sql/engine/aggregate/ob_aggregate_function.cpp +++ b/src/sql/engine/aggregate/ob_aggregate_function.cpp @@ -164,7 +164,7 @@ int ObGroupConcatRowStore::init(const uint64_t tenant_id, iter_idx_ = 0; if (sort_columns.empty()) { int64_t sort_area_size = 0; - if (OB_FAIL(ObSqlWorkareaUtil::get_workarea_size(SORT_WORK_AREA, tenant_id, NULL, sort_area_size))) { + if (OB_FAIL(ObSqlWorkareaUtil::get_workarea_size(SORT_WORK_AREA, tenant_id, sort_area_size))) { LOG_WARN("failed to get workarea size", K(ret), K(tenant_id)); } else if (OB_FAIL(rs_.init(sort_area_size, tenant_id, ObCtxIds::WORK_AREA, ObModIds::OB_SQL_AGGR_FUN_GROUP_CONCAT, diff --git a/src/sql/engine/aggregate/ob_aggregate_processor.cpp b/src/sql/engine/aggregate/ob_aggregate_processor.cpp index 23cb36830a..388511c78a 100644 --- a/src/sql/engine/aggregate/ob_aggregate_processor.cpp +++ b/src/sql/engine/aggregate/ob_aggregate_processor.cpp @@ -353,7 +353,7 @@ int ObAggregateProcessor::GroupConcatExtraResult::init(const uint64_t tenant_id, } else { int64_t sort_area_size = 0; if (OB_FAIL(ObSqlWorkareaUtil::get_workarea_size( - SORT_WORK_AREA, tenant_id, &eval_ctx.exec_ctx_, sort_area_size))) { + SORT_WORK_AREA, tenant_id, sort_area_size))) { LOG_WARN("failed to get workarea size", K(ret), K(tenant_id)); } else if (OB_FAIL(row_store_.init(sort_area_size, tenant_id, diff --git a/src/sql/engine/join/ob_hash_join_op.cpp b/src/sql/engine/join/ob_hash_join_op.cpp index 8f334ec113..3c447c4b5c 100644 --- a/src/sql/engine/join/ob_hash_join_op.cpp +++ b/src/sql/engine/join/ob_hash_join_op.cpp @@ -1417,7 +1417,7 @@ int ObHashJoinOp::get_max_memory_size(int64_t input_size) int64_t extra_memory_size = get_extra_memory_size(); int64_t memory_size = (extra_memory_size + input_size) < 0 ? input_size : (extra_memory_size + input_size); if (OB_FAIL(ObSqlWorkareaUtil::get_workarea_size( - ObSqlWorkAreaType::HASH_WORK_AREA, tenant_id, &ctx_, hash_area_size))) { + ObSqlWorkAreaType::HASH_WORK_AREA, tenant_id, hash_area_size))) { LOG_WARN("failed to get workarea size", K(ret), K(tenant_id)); } else if (FALSE_IT(remain_data_memory_size_ = hash_area_size * 80 / 100)) { // default data memory size: 80% @@ -1670,7 +1670,7 @@ int ObHashJoinOp::get_processor_type() int64_t hash_area_size = 0; if (OB_FAIL(ObSqlWorkareaUtil::get_workarea_size( ObSqlWorkAreaType::HASH_WORK_AREA, - ctx_.get_my_session()->get_effective_tenant_id(), &ctx_, hash_area_size))) { + ctx_.get_my_session()->get_effective_tenant_id(), hash_area_size))) { LOG_WARN("failed to get workarea size", K(ret)); } remain_data_memory_size_ = hash_area_size * 10; diff --git a/src/sql/engine/ob_sql_mem_mgr_processor.cpp b/src/sql/engine/ob_sql_mem_mgr_processor.cpp index 6492a90269..8512e0b8e8 100644 --- a/src/sql/engine/ob_sql_mem_mgr_processor.cpp +++ b/src/sql/engine/ob_sql_mem_mgr_processor.cpp @@ -92,7 +92,7 @@ int ObSqlMemMgrProcessor::init( int64_t max_mem_size = MAX_SQL_MEM_SIZE; if (OB_FAIL(ret)) { } else if (OB_FAIL(ObSqlWorkareaUtil::get_workarea_size( - profile_.get_work_area_type(), tenant_id_, exec_ctx, max_mem_size))) { + profile_.get_work_area_type(), tenant_id_, max_mem_size))) { LOG_WARN("failed to get workarea size", K(ret), K(tenant_id_), K(max_mem_size)); } if (!profile_.get_auto_policy()) { @@ -305,47 +305,24 @@ int ObSqlMemMgrProcessor::alloc_dir_id(int64_t &dir_id) return ret; } -int ObSqlWorkareaUtil::get_workarea_size(const ObSqlWorkAreaType wa_type, - const int64_t tenant_id, - ObExecContext *exec_ctx, - int64_t &value) +int ObSqlWorkareaUtil::get_workarea_size(const ObSqlWorkAreaType wa_type, const int64_t tenant_id, int64_t &value) { int ret = OB_SUCCESS; - - if (NULL != exec_ctx) { - if (OB_ISNULL(exec_ctx->get_my_session())) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected exec_ctx or session", K(ret), K(wa_type), K(tenant_id), KP(exec_ctx)); + ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); + if (tenant_config.is_valid()) { + if (HASH_WORK_AREA == wa_type) { + value = tenant_config->_hash_area_size; + } else if (SORT_WORK_AREA == wa_type) { + value = tenant_config->_sort_area_size; } else { - if (HASH_WORK_AREA == wa_type) { - value = exec_ctx->get_my_session()->get_tenant_hash_area_size(); - } else if (SORT_WORK_AREA == wa_type) { - value = exec_ctx->get_my_session()->get_tenant_sort_area_size(); - } else { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected status: workarea type", K(wa_type), K(tenant_id)); - } + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected status: workarea type", K(wa_type), K(tenant_id)); } + LOG_DEBUG("debug workarea size", K(value), K(tenant_id), K(lbt())); } else { - ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); - if (tenant_config.is_valid()) { - if (HASH_WORK_AREA == wa_type) { - value = tenant_config->_hash_area_size; - } else if (SORT_WORK_AREA == wa_type) { - value = tenant_config->_sort_area_size; - } else { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected status: workarea type", K(wa_type), K(tenant_id)); - } - LOG_DEBUG("debug workarea size", K(value), K(tenant_id), K(lbt())); - } else { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to init tenant config", K(tenant_id), K(ret)); - } + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to init tenant config", K(tenant_id), K(ret)); } - - LOG_DEBUG("debug workarea size", K(value), K(tenant_id), K(lbt())); - return ret; } diff --git a/src/sql/engine/ob_sql_mem_mgr_processor.h b/src/sql/engine/ob_sql_mem_mgr_processor.h index be4a1783da..9cce5ffc48 100644 --- a/src/sql/engine/ob_sql_mem_mgr_processor.h +++ b/src/sql/engine/ob_sql_mem_mgr_processor.h @@ -183,7 +183,6 @@ public: static int get_workarea_size( const ObSqlWorkAreaType wa_type, const int64_t tenant_id, - ObExecContext *exec_ctx, int64_t &value ); }; diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 8a3b6c0f13..1567432dda 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -4009,10 +4009,11 @@ int ObSql::pc_add_plan(ObPlanCacheCtx &pc_ctx, pc_ctx.fp_result_.pc_key_.namespace_ = ObLibCacheNameSpace::NS_CRSR; plan_added = false; bool is_batch_exec = pc_ctx.sql_ctx_.multi_stmt_item_.is_batched_multi_stmt(); + omt::ObTenantConfigGuard tenant_config(TENANT_CONF(MTL_ID())); if (OB_ISNULL(phy_plan) || OB_ISNULL(plan_cache)) { ret = OB_NOT_INIT; LOG_WARN("Fail to generate plan", K(phy_plan), K(plan_cache)); - } else if (OB_ISNULL(pc_ctx.sql_ctx_.session_info_)) { + } else if (!tenant_config.is_valid()) { ret = OB_ERR_UNEXPECTED; LOG_WARN("tenant config is invalid", K(ret)); } else if (OB_USE_PLAN_CACHE_NONE == phy_plan->get_phy_plan_hint().plan_cache_policy_) { @@ -4037,7 +4038,7 @@ int ObSql::pc_add_plan(ObPlanCacheCtx &pc_ctx, phy_plan->stat_.db_id_ = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.db_id_; phy_plan->stat_.is_rewrite_sql_ = pc_ctx.is_rewrite_sql_; phy_plan->stat_.rule_version_ = rule_mgr->get_rule_version(); - phy_plan->stat_.enable_udr_ = pc_ctx.sql_ctx_.session_info_->enable_user_defined_rewrite_rules(); + phy_plan->stat_.enable_udr_ = tenant_config->enable_user_defined_rewrite_rules; if (PC_PS_MODE == pc_ctx.mode_ || PC_PL_MODE == pc_ctx.mode_) { //远程SQL第二次进入plan,将raw_sql作为pc_key存入plan cache中, diff --git a/src/sql/plan_cache/ob_plan_cache.cpp b/src/sql/plan_cache/ob_plan_cache.cpp index 1607b378f7..28f747bc05 100644 --- a/src/sql/plan_cache/ob_plan_cache.cpp +++ b/src/sql/plan_cache/ob_plan_cache.cpp @@ -370,19 +370,22 @@ int ObPlanCache::check_after_get_plan(int tmp_ret, ObPhysicalPlan *plan = NULL; bool need_late_compilation = false; ObJITEnableMode jit_mode = ObJITEnableMode::OFF; - bool enable_user_defined_rewrite_rules = false; + omt::ObTenantConfigGuard tenant_config(TENANT_CONF(MTL_ID())); ObPlanCacheCtx &pc_ctx = static_cast(ctx); if (cache_obj != NULL && ObLibCacheNameSpace::NS_CRSR == cache_obj->get_ns()) { plan = static_cast(cache_obj); } if (OB_SUCC(ret)) { - if (OB_ISNULL(pc_ctx.sql_ctx_.session_info_)) { + if (!tenant_config.is_valid()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("tenant config is invalid", K(ret)); + } else if (OB_ISNULL(pc_ctx.sql_ctx_.session_info_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null session info", K(ret)); } else if (OB_FAIL(pc_ctx.sql_ctx_.session_info_->get_jit_enabled_mode(jit_mode))) { LOG_WARN("failed to get jit mode"); } else { - enable_user_defined_rewrite_rules = pc_ctx.sql_ctx_.session_info_->enable_user_defined_rewrite_rules(); + // do nothing } } if (OB_SUCC(ret) && plan != NULL) { @@ -391,17 +394,17 @@ int ObPlanCache::check_after_get_plan(int tmp_ret, // when the global rule version changes or enable_user_defined_rewrite_rules changes // it is necessary to check whether the physical plan are expired if ((plan->get_rule_version() != rule_mgr->get_rule_version() - || plan->is_enable_udr() != enable_user_defined_rewrite_rules)) { + || plan->is_enable_udr() != tenant_config->enable_user_defined_rewrite_rules)) { if (OB_FAIL(rule_mgr->fuzzy_check_by_pattern_digest(pc_ctx.get_normalized_pattern_digest(), is_exists))) { LOG_WARN("failed to fuzzy check by pattern digest", K(ret)); } else if (is_exists || plan->is_rewrite_sql()) { ret = OB_OLD_SCHEMA_VERSION; LOG_TRACE("Obsolete user-defined rewrite rules require eviction plan", K(ret), - K(is_exists), K(pc_ctx.raw_sql_), K(plan->is_enable_udr()), K(enable_user_defined_rewrite_rules), + K(is_exists), K(pc_ctx.raw_sql_), K(plan->is_enable_udr()), K(tenant_config->enable_user_defined_rewrite_rules), K(plan->is_rewrite_sql()), K(plan->get_rule_version()), K(rule_mgr->get_rule_version())); } else { plan->set_rule_version(rule_mgr->get_rule_version()); - plan->set_is_enable_udr(enable_user_defined_rewrite_rules); + plan->set_is_enable_udr(tenant_config->enable_user_defined_rewrite_rules); } } if (OB_SUCC(ret)) { diff --git a/src/sql/session/ob_sql_session_info.cpp b/src/sql/session/ob_sql_session_info.cpp index e5cc7b2fbd..2d7d95fec5 100644 --- a/src/sql/session/ob_sql_session_info.cpp +++ b/src/sql/session/ob_sql_session_info.cpp @@ -2312,7 +2312,6 @@ void ObSQLSessionInfo::ObCachedTenantConfigInfo::refresh() } // 4.sort area size ATOMIC_STORE(&sort_area_size_, tenant_config->_sort_area_size); - ATOMIC_STORE(&hash_area_size_, tenant_config->_hash_area_size); // 5.allow security audit if (OB_SUCCESS != (tmp_ret = ObSecurityAuditUtils::check_allow_audit(*session_, at_type_))) { LOG_WARN_RET(tmp_ret, "fail get tenant_config", "ret", tmp_ret, diff --git a/src/sql/session/ob_sql_session_info.h b/src/sql/session/ob_sql_session_info.h index 20dc70671d..1b9b94bc77 100644 --- a/src/sql/session/ob_sql_session_info.h +++ b/src/sql/session/ob_sql_session_info.h @@ -491,8 +491,6 @@ public: px_join_skew_minfreq_(30), at_type_(ObAuditTrailType::NONE), sort_area_size_(128*1024*1024), - hash_area_size_(128*1024*1024), - enable_user_defined_rewrite_rules_(false), print_sample_ppm_(0), last_check_ec_ts_(0), session_(session) @@ -506,11 +504,9 @@ public: bool get_enable_sql_extension() const { return enable_sql_extension_; } ObAuditTrailType get_at_type() const { return at_type_; } int64_t get_sort_area_size() const { return ATOMIC_LOAD(&sort_area_size_); } - int64_t get_hash_area_size() const { return ATOMIC_LOAD(&hash_area_size_); } int64_t get_print_sample_ppm() const { return ATOMIC_LOAD(&print_sample_ppm_); } bool get_px_join_skew_handling() const { return px_join_skew_handling_; } int64_t get_px_join_skew_minfreq() const { return px_join_skew_minfreq_; } - bool enable_user_defined_rewrite_rules() const { return enable_user_defined_rewrite_rules_; } private: //租户级别配置项缓存session 上,避免每次获取都需要刷新 bool is_external_consistent_; @@ -522,8 +518,6 @@ public: int64_t px_join_skew_minfreq_; ObAuditTrailType at_type_; int64_t sort_area_size_; - int64_t hash_area_size_; - bool enable_user_defined_rewrite_rules_; // for record sys config print_sample_ppm int64_t print_sample_ppm_; int64_t last_check_ec_ts_; @@ -977,21 +971,11 @@ public: at_type = cached_tenant_config_info_.get_at_type(); return common::OB_SUCCESS; } - int64_t get_tenant_hash_area_size() - { - cached_tenant_config_info_.refresh(); - return cached_tenant_config_info_.get_hash_area_size(); - } int64_t get_tenant_sort_area_size() { cached_tenant_config_info_.refresh(); return cached_tenant_config_info_.get_sort_area_size(); } - bool enable_user_defined_rewrite_rules() - { - cached_tenant_config_info_.refresh(); - return cached_tenant_config_info_.enable_user_defined_rewrite_rules(); - } int64_t get_tenant_print_sample_ppm() { cached_tenant_config_info_.refresh(); diff --git a/src/sql/udr/ob_udr_utils.cpp b/src/sql/udr/ob_udr_utils.cpp index fb6cd1ad46..fd5c2f9919 100644 --- a/src/sql/udr/ob_udr_utils.cpp +++ b/src/sql/udr/ob_udr_utils.cpp @@ -241,8 +241,12 @@ int ObUDRUtils::match_udr_and_refill_ctx(const ObString &pattern, int ret = OB_SUCCESS; is_match_udr = false; ObSQLSessionInfo &session = result.get_session(); - if (session.enable_user_defined_rewrite_rules() - && !(pc_ctx.is_inner_sql() || PC_PL_MODE == pc_ctx.mode_)) { + omt::ObTenantConfigGuard tenant_config(TENANT_CONF(session.get_effective_tenant_id())); + if (!tenant_config.is_valid()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("tenant config is invalid", K(ret)); + } else if (tenant_config->enable_user_defined_rewrite_rules + && !(pc_ctx.is_inner_sql() || PC_PL_MODE == pc_ctx.mode_)) { ObIAllocator &allocator = result.get_mem_pool(); PatternConstConsList cst_cons_list; if (OB_FAIL(match_udr_item(pattern, session, allocator, item_guard, &cst_cons_list))) {