diff --git a/src/sql/code_generator/ob_static_engine_cg.cpp b/src/sql/code_generator/ob_static_engine_cg.cpp index 3da70201c..5d5647835 100644 --- a/src/sql/code_generator/ob_static_engine_cg.cpp +++ b/src/sql/code_generator/ob_static_engine_cg.cpp @@ -8966,24 +8966,20 @@ int ObStaticEngineCG::set_other_properties(const ObLogPlan &log_plan, ObPhysical // remember DML's table id set for cursor validation // for more details refer to `phy_plan.dml_table_ids_` - if (OB_SUCC(ret) && log_plan.get_stmt()->is_dml_write_stmt()) { - const int64_t tenant_id = my_session->get_effective_tenant_id(); - omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); - if (tenant_config.is_valid() && tenant_config->_enable_enhanced_cursor_validation) { - const ObDelUpdStmt *dml_stmt = static_cast(log_plan.get_stmt()); - ObSEArray table_infos; - if (OB_FAIL(dml_stmt->get_dml_table_infos(table_infos))) { - LOG_WARN("get dml table infos failed", K(ret)); - } else { - phy_plan.get_dml_table_ids().set_capacity(table_infos.count()); - ARRAY_FOREACH(table_infos, i) { - if (OB_FAIL(phy_plan.get_dml_table_ids().push_back(table_infos[i]->ref_table_id_))) { - LOG_WARN("push dml table id failed", K(ret)); - } + if (OB_SUCC(ret) && log_plan.get_stmt()->is_dml_write_stmt() && my_session->enable_enhanced_cursor_validation()) { + const ObDelUpdStmt *dml_stmt = static_cast(log_plan.get_stmt()); + ObSEArray table_infos; + if (OB_FAIL(dml_stmt->get_dml_table_infos(table_infos))) { + LOG_WARN("get dml table infos failed", K(ret)); + } else { + phy_plan.get_dml_table_ids().set_capacity(table_infos.count()); + ARRAY_FOREACH(table_infos, i) { + if (OB_FAIL(phy_plan.get_dml_table_ids().push_back(table_infos[i]->ref_table_id_))) { + LOG_WARN("push dml table id failed", K(ret)); } } - LOG_TRACE("record dml table ids for cursor validation", K(phy_plan.get_dml_table_ids())); } + LOG_TRACE("record dml table ids for cursor validation", K(phy_plan.get_dml_table_ids())); } if (OB_SUCC(ret)) { diff --git a/src/sql/ob_spi.cpp b/src/sql/ob_spi.cpp index e5b0d936d..1d967dd10 100644 --- a/src/sql/ob_spi.cpp +++ b/src/sql/ob_spi.cpp @@ -8928,9 +8928,7 @@ int ObSPIService::setup_cursor_snapshot_verify_(ObPLCursorInfo *cursor, ObSPIRes } need_register_snapshot = true; } else if (cursor->is_streaming() && tx && tx->is_in_tx()) { - const int64_t tenant_id = exec_ctx.get_my_session()->get_effective_tenant_id(); - omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); - if (tenant_config.is_valid() && tenant_config->_enable_enhanced_cursor_validation) { + if (exec_ctx.get_my_session()->enable_enhanced_cursor_validation()) { need_register_snapshot = false; LOG_TRACE("enable cursor open check read uncommitted"); const DependenyTableStore &tables = spi_result->get_result_set()->get_physical_plan()->get_dependency_table(); diff --git a/src/sql/ob_sql_trans_control.cpp b/src/sql/ob_sql_trans_control.cpp index 208dc35aa..081e2bdd7 100644 --- a/src/sql/ob_sql_trans_control.cpp +++ b/src/sql/ob_sql_trans_control.cpp @@ -1260,12 +1260,8 @@ int ObSqlTransControl::end_stmt(ObExecContext &exec_ctx, const bool rollback, co OX (ObTransDeadlockDetectorAdapter::maintain_deadlock_info_when_end_stmt(exec_ctx, rollback)); // if stmt is dml, record its table_id set, used by cursor verify snapshot - if (OB_SUCC(ret) && !rollback && plan->is_dml_write_stmt()) { - const int64_t tenant_id = session->get_effective_tenant_id(); - omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); - if (tenant_config.is_valid() && tenant_config->_enable_enhanced_cursor_validation) { - OZ (tx_desc->add_modified_tables(plan->get_dml_table_ids()), plan->get_dml_table_ids()); - } + if (OB_SUCC(ret) && !rollback && plan->is_dml_write_stmt() && session->enable_enhanced_cursor_validation()) { + OZ (tx_desc->add_modified_tables(plan->get_dml_table_ids()), plan->get_dml_table_ids()); } ObTxExecResult &tx_result = session->get_trans_result(); if (OB_E(EventTable::EN_TX_RESULT_INCOMPLETE, session->get_sessid()) tx_result.is_incomplete()) { diff --git a/src/sql/session/ob_sql_session_info.cpp b/src/sql/session/ob_sql_session_info.cpp index 9ce80b3e8..493c05337 100644 --- a/src/sql/session/ob_sql_session_info.cpp +++ b/src/sql/session/ob_sql_session_info.cpp @@ -3029,6 +3029,8 @@ void ObSQLSessionInfo::ObCachedTenantConfigInfo::refresh() tenant_config->sql_plan_management_mode.get_value_string()); // 7. print_sample_ppm_ for flt ATOMIC_STORE(&print_sample_ppm_, tenant_config->_print_sample_ppm); + // 8. _enable_enhanced_cursor_validation + ATOMIC_STORE(&enable_enhanced_cursor_validation_, tenant_config->_enable_enhanced_cursor_validation); } ATOMIC_STORE(&last_check_ec_ts_, cur_ts); session_->update_tenant_config_version( diff --git a/src/sql/session/ob_sql_session_info.h b/src/sql/session/ob_sql_session_info.h index b9ce97cee..47ac6aaf2 100644 --- a/src/sql/session/ob_sql_session_info.h +++ b/src/sql/session/ob_sql_session_info.h @@ -726,6 +726,7 @@ public: print_sample_ppm_(0), last_check_ec_ts_(0), sql_plan_management_mode_(0), + enable_enhanced_cursor_validation_(false), session_(session) { } @@ -751,6 +752,7 @@ public: bool get_enable_column_store() const { return enable_column_store_; } bool get_enable_decimal_int_type() const { return enable_decimal_int_type_; } int64_t get_sql_plan_management_mode() const { return sql_plan_management_mode_; } + bool enable_enhanced_cursor_validation() const { return enable_enhanced_cursor_validation_; } private: //租户级别配置项缓存session 上,避免每次获取都需要刷新 bool is_external_consistent_; @@ -776,6 +778,7 @@ public: int64_t print_sample_ppm_; int64_t last_check_ec_ts_; int64_t sql_plan_management_mode_; + bool enable_enhanced_cursor_validation_; ObSQLSessionInfo *session_; }; @@ -1439,6 +1442,11 @@ public: cached_tenant_config_info_.refresh(); return cached_tenant_config_info_.get_audit_log_query_sql(); } + bool enable_enhanced_cursor_validation() + { + cached_tenant_config_info_.refresh(); + return cached_tenant_config_info_.enable_enhanced_cursor_validation(); + } int get_tmp_table_size(uint64_t &size); int ps_use_stream_result_set(bool &use_stream); void set_proxy_version(uint64_t v) { proxy_version_ = v; }