diff --git a/src/observer/mysql/ob_mysql_request_manager.cpp b/src/observer/mysql/ob_mysql_request_manager.cpp index c97d0777d4..378908d8b3 100644 --- a/src/observer/mysql/ob_mysql_request_manager.cpp +++ b/src/observer/mysql/ob_mysql_request_manager.cpp @@ -163,6 +163,7 @@ void ObMySQLRequestManager::destroy() int ObMySQLRequestManager::record_request(const ObAuditRecordData &audit_record, const bool enable_query_response_time_stats, + const int64_t query_record_size_limit, bool is_sensitive) { int ret = OB_SUCCESS; @@ -193,7 +194,7 @@ int ObMySQLRequestManager::record_request(const ObAuditRecordData &audit_record, record->data_ = audit_record; //deep copy sql if ((audit_record.sql_len_ > 0) && (NULL != audit_record.sql_)) { - int64_t stmt_len = min(audit_record.sql_len_, ObSQLUtils::get_query_record_size_limit(get_tenant_id())); + int64_t stmt_len = min(audit_record.sql_len_, query_record_size_limit); MEMCPY(buf + pos, audit_record.sql_, stmt_len); record->data_.sql_ = buf + pos; pos += stmt_len; diff --git a/src/observer/mysql/ob_mysql_request_manager.h b/src/observer/mysql/ob_mysql_request_manager.h index e4d5968d75..8e48583f21 100644 --- a/src/observer/mysql/ob_mysql_request_manager.h +++ b/src/observer/mysql/ob_mysql_request_manager.h @@ -114,6 +114,7 @@ public: int record_request(const ObAuditRecordData &audit_record, const bool enable_query_response_time_stats, + const int64_t query_record_size_limit, bool is_sensitive = false); int64_t get_start_idx(); int64_t get_end_idx(); diff --git a/src/observer/ob_inner_sql_connection.cpp b/src/observer/ob_inner_sql_connection.cpp index 05cb12b53f..939f83c246 100644 --- a/src/observer/ob_inner_sql_connection.cpp +++ b/src/observer/ob_inner_sql_connection.cpp @@ -600,7 +600,7 @@ int ObInnerSQLConnection::process_audit_record(sql::ObResultSet &result_set, audit_record.ps_inner_stmt_id_ = ps_stmt_id; if (ps_sql.length() != 0) { audit_record.sql_ = const_cast(ps_sql.ptr()); - audit_record.sql_len_ = min(ps_sql.length(), ObSQLUtils::get_query_record_size_limit(session.get_effective_tenant_id())); + audit_record.sql_len_ = min(ps_sql.length(), session.get_tenant_query_record_size_limit()); } MEMCPY(audit_record.sql_id_, sql_ctx.sql_id_, (int32_t)sizeof(audit_record.sql_id_)); audit_record.affected_rows_ = result_set.get_affected_rows(); diff --git a/src/observer/table/ob_table_rpc_processor.cpp b/src/observer/table/ob_table_rpc_processor.cpp index 41796cc154..eaf54b4248 100644 --- a/src/observer/table/ob_table_rpc_processor.cpp +++ b/src/observer/table/ob_table_rpc_processor.cpp @@ -769,10 +769,11 @@ void ObTableApiProcessorBase::end_audit() ret = OB_SUCCESS; MTL_SWITCH(credential_.tenant_id_) { obmysql::ObMySQLRequestManager *req_manager = MTL(obmysql::ObMySQLRequestManager*); + const int64_t record_limit = ObSQLUtils::get_query_record_size_limit(credential_.tenant_id_); if (nullptr == req_manager) { ret = OB_ERR_UNEXPECTED; LOG_WARN("failed to get request manager for current tenant", K(ret)); - } else if (OB_FAIL(req_manager->record_request(audit_record_, true))) { + } else if (OB_FAIL(req_manager->record_request(audit_record_, true, record_limit))) { if (OB_SIZE_OVERFLOW == ret || OB_ALLOCATE_MEMORY_FAILED == ret) { LOG_DEBUG("cannot allocate mem for record", K(ret)); ret = OB_SUCCESS; diff --git a/src/sql/engine/ob_physical_plan.cpp b/src/sql/engine/ob_physical_plan.cpp index e652397f9d..35795be3ae 100644 --- a/src/sql/engine/ob_physical_plan.cpp +++ b/src/sql/engine/ob_physical_plan.cpp @@ -1221,8 +1221,7 @@ int ObPhysicalPlan::update_cache_obj_stat(ObILibCacheCtx &ctx) stat_.slow_count_ = 0; stat_.slowest_exec_time_ = 0; stat_.slowest_exec_usec_ = 0; - int64_t sql_length = ObSQLUtils::get_query_record_size_limit( - pc_ctx.sql_ctx_.session_info_->get_effective_tenant_id()); + int64_t sql_length = pc_ctx.sql_ctx_.session_info_->get_tenant_query_record_size_limit(); if (PC_PS_MODE == pc_ctx.mode_ || PC_PL_MODE == pc_ctx.mode_) { ObTruncatedString trunc_stmt(pc_ctx.raw_sql_, sql_length); if (OB_FAIL(ob_write_string(get_allocator(), diff --git a/src/sql/ob_sql_utils.cpp b/src/sql/ob_sql_utils.cpp index 3140f1b84d..bb2bf462dc 100644 --- a/src/sql/ob_sql_utils.cpp +++ b/src/sql/ob_sql_utils.cpp @@ -4629,6 +4629,7 @@ int ObSQLUtils::handle_audit_record(bool need_retry, const ObAuditRecordData &audit_record = session.get_final_audit_record(exec_mode); if (OB_FAIL(req_manager->record_request(audit_record, session.enable_query_response_time_stats(), + session.get_tenant_query_record_size_limit(), is_sensitive))) { if (OB_SIZE_OVERFLOW == ret || OB_ALLOCATE_MEMORY_FAILED == ret) { LOG_DEBUG("cannot allocate mem for record", K(ret)); diff --git a/src/sql/session/ob_sql_session_info.cpp b/src/sql/session/ob_sql_session_info.cpp index 67f87cb7e3..0b8502dad1 100644 --- a/src/sql/session/ob_sql_session_info.cpp +++ b/src/sql/session/ob_sql_session_info.cpp @@ -626,21 +626,15 @@ bool ObSQLSessionInfo::is_spf_mlj_group_rescan_enabled() const return bret; } -int ObSQLSessionInfo::get_spm_mode(int64_t &spm_mode) const +int ObSQLSessionInfo::get_spm_mode(int64_t &spm_mode) { int ret = OB_SUCCESS; - spm_mode = 0; - int64_t tenant_id = get_effective_tenant_id(); - omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); - if (tenant_config.is_valid()) { - spm_mode = ObSqlPlanManagementModeChecker::get_spm_mode_by_string( - tenant_config->sql_plan_management_mode.get_value_string()); - if (0 == spm_mode) { - bool sysvar_use_baseline = false; - get_use_plan_baseline(sysvar_use_baseline); - if (sysvar_use_baseline) { - spm_mode = 1; - } + spm_mode = get_sql_plan_management_mode(); + if (0 == spm_mode) { + bool sysvar_use_baseline = false; + get_use_plan_baseline(sysvar_use_baseline); + if (sysvar_use_baseline) { + spm_mode = 1; } } return ret; @@ -2019,7 +2013,7 @@ const ObAuditRecordData &ObSQLSessionInfo::get_final_audit_record( } else { ObString sql = get_current_query_string(); audit_record_.sql_ = const_cast(sql.ptr()); - audit_record_.sql_len_ = min(sql.length(), ObSQLUtils::get_query_record_size_limit(get_effective_tenant_id())); + audit_record_.sql_len_ = min(sql.length(), get_tenant_query_record_size_limit()); audit_record_.sql_cs_type_ = get_local_collation_connection(); } @@ -3023,6 +3017,7 @@ void ObSQLSessionInfo::ObCachedTenantConfigInfo::refresh() ATOMIC_STORE(&enable_query_response_time_stats_, tenant_config->query_response_time_stats); ATOMIC_STORE(&enable_user_defined_rewrite_rules_, tenant_config->enable_user_defined_rewrite_rules); ATOMIC_STORE(&range_optimizer_max_mem_size_, tenant_config->range_optimizer_max_mem_size); + ATOMIC_STORE(&_query_record_size_limit_, tenant_config->_query_record_size_limit); // 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, @@ -3036,6 +3031,8 @@ void ObSQLSessionInfo::ObCachedTenantConfigInfo::refresh() px_join_skew_minfreq_ = tenant_config->_px_join_skew_minfreq; enable_column_store_ = tenant_config->_enable_column_store; enable_decimal_int_type_ = tenant_config->_enable_decimal_int_type; + sql_plan_management_mode_ = ObSqlPlanManagementModeChecker::get_spm_mode_by_string( + 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); } diff --git a/src/sql/session/ob_sql_session_info.h b/src/sql/session/ob_sql_session_info.h index dd7023461a..27f1b50f82 100644 --- a/src/sql/session/ob_sql_session_info.h +++ b/src/sql/session/ob_sql_session_info.h @@ -702,10 +702,12 @@ public: enable_query_response_time_stats_(false), enable_user_defined_rewrite_rules_(false), range_optimizer_max_mem_size_(128*1024*1024), + _query_record_size_limit_(65536), enable_column_store_(false), enable_decimal_int_type_(false), print_sample_ppm_(0), last_check_ec_ts_(0), + sql_plan_management_mode_(0), session_(session) { } @@ -725,8 +727,10 @@ public: 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_; } int64_t get_range_optimizer_max_mem_size() const { return range_optimizer_max_mem_size_; } + int64_t get_query_record_size_limit() const { return _query_record_size_limit_; } 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_; } private: //租户级别配置项缓存session 上,避免每次获取都需要刷新 bool is_external_consistent_; @@ -743,11 +747,13 @@ public: bool enable_query_response_time_stats_; bool enable_user_defined_rewrite_rules_; int64_t range_optimizer_max_mem_size_; + int64_t _query_record_size_limit_; bool enable_column_store_; bool enable_decimal_int_type_; // for record sys config print_sample_ppm int64_t print_sample_ppm_; int64_t last_check_ec_ts_; + int64_t sql_plan_management_mode_; ObSQLSessionInfo *session_; }; @@ -1271,7 +1277,7 @@ public: int is_adj_index_cost_enabled(bool &enabled, int64_t &stats_cost_percent) const; bool is_spf_mlj_group_rescan_enabled() const; int is_preserve_order_for_pagination_enabled(bool &enabled) const; - int get_spm_mode(int64_t &spm_mode) const; + int get_spm_mode(int64_t &spm_mode); ObSessionDDLInfo &get_ddl_info() { return ddl_info_; } const ObSessionDDLInfo &get_ddl_info() const { return ddl_info_; } @@ -1382,6 +1388,16 @@ public: cached_tenant_config_info_.refresh(); return cached_tenant_config_info_.get_enable_decimal_int_type(); } + int64_t get_tenant_query_record_size_limit() + { + cached_tenant_config_info_.refresh(); + return cached_tenant_config_info_.get_query_record_size_limit(); + } + int64_t get_sql_plan_management_mode() + { + cached_tenant_config_info_.refresh(); + return cached_tenant_config_info_.get_sql_plan_management_mode(); + } 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; }