From f95bb7f5906960e97641efcaeed328868ab42d53 Mon Sep 17 00:00:00 2001 From: yaojing624 Date: Mon, 20 Nov 2023 17:15:14 +0000 Subject: [PATCH] sys var placeholder & session serialize placeholder --- .../system_variable/ob_sys_var_class_type.h | 2 + .../ob_system_variable_alias.h | 2 + .../ob_system_variable_factory.cpp | 50 ++++++++++++++++++- .../ob_system_variable_factory.h | 16 +++++- .../ob_system_variable_init.cpp | 32 +++++++++++- .../ob_system_variable_init.json | 30 +++++++++++ src/sql/session/ob_basic_session_info.cpp | 16 ++++-- src/sql/session/ob_basic_session_info.h | 2 + 8 files changed, 144 insertions(+), 6 deletions(-) diff --git a/src/share/system_variable/ob_sys_var_class_type.h b/src/share/system_variable/ob_sys_var_class_type.h index e07fdf7ff6..caae386ac8 100644 --- a/src/share/system_variable/ob_sys_var_class_type.h +++ b/src/share/system_variable/ob_sys_var_class_type.h @@ -264,6 +264,8 @@ enum ObSysVarClassType SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD = 10158, SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION = 10159, SYS_VAR_LC_TIME_NAMES = 10160, + SYS_VAR__AFFECTED_ROWS = 10161, + SYS_VAR__FOUND_ROWS = 10162, }; } diff --git a/src/share/system_variable/ob_system_variable_alias.h b/src/share/system_variable/ob_system_variable_alias.h index 9e983d3172..d8e8eb5be9 100644 --- a/src/share/system_variable/ob_system_variable_alias.h +++ b/src/share/system_variable/ob_system_variable_alias.h @@ -259,6 +259,8 @@ namespace share static const char* const OB_SV_DEFAULT_LOB_INROW_THRESHOLD = "ob_default_lob_inrow_threshold"; static const char* const OB_SV__ENABLE_STORAGE_CARDINALITY_ESTIMATION = "_enable_storage_cardinality_estimation"; static const char* const OB_SV_LC_TIME_NAMES = "lc_time_names"; + static const char* const OB_SV__AFFECTED_ROWS = "_affected_rows"; + static const char* const OB_SV__FOUND_ROWS = "_found_rows"; } } diff --git a/src/share/system_variable/ob_system_variable_factory.cpp b/src/share/system_variable/ob_system_variable_factory.cpp index df10b4d38f..a000f1162f 100644 --- a/src/share/system_variable/ob_system_variable_factory.cpp +++ b/src/share/system_variable/ob_system_variable_factory.cpp @@ -123,6 +123,7 @@ const char *ObSysVarParallelDegreePolicy::PARALLEL_DEGREE_POLICY_NAMES[] = { }; const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { + "_affected_rows", "_aggregation_optimization_settings", "_clear_last_archive_timestamp", "_create_audit_purge_job", @@ -136,6 +137,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "_force_parallel_ddl_dop", "_force_parallel_dml_dop", "_force_parallel_query_dop", + "_found_rows", "_groupby_nopushdown_cut_ratio", "_nlj_batching_enabled", "_ob_ols_policy_session_labels", @@ -369,6 +371,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { }; const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { + SYS_VAR__AFFECTED_ROWS, SYS_VAR__AGGREGATION_OPTIMIZATION_SETTINGS, SYS_VAR__CLEAR_LAST_ARCHIVE_TIMESTAMP, SYS_VAR__CREATE_AUDIT_PURGE_JOB, @@ -382,6 +385,7 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { SYS_VAR__FORCE_PARALLEL_DDL_DOP, SYS_VAR__FORCE_PARALLEL_DML_DOP, SYS_VAR__FORCE_PARALLEL_QUERY_DOP, + SYS_VAR__FOUND_ROWS, SYS_VAR__GROUPBY_NOPUSHDOWN_CUT_RATIO, SYS_VAR__NLJ_BATCHING_ENABLED, SYS_VAR__OB_OLS_POLICY_SESSION_LABELS, @@ -857,7 +861,9 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = { "ob_enable_pl_cache", "ob_default_lob_inrow_threshold", "_enable_storage_cardinality_estimation", - "lc_time_names" + "lc_time_names", + "_affected_rows", + "_found_rows" }; bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2) @@ -1269,6 +1275,8 @@ int ObSysVarFactory::create_all_sys_vars() + sizeof(ObSysVarObDefaultLobInrowThreshold) + sizeof(ObSysVarEnableStorageCardinalityEstimation) + sizeof(ObSysVarLcTimeNames) + + sizeof(ObSysVarAffectedRows) + + sizeof(ObSysVarFoundRows) ; void *ptr = NULL; if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) { @@ -3464,6 +3472,24 @@ int ObSysVarFactory::create_all_sys_vars() ptr = (void *)((char *)ptr + sizeof(ObSysVarLcTimeNames)); } } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarAffectedRows())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarAffectedRows", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR__AFFECTED_ROWS))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarAffectedRows)); + } + } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarFoundRows())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarFoundRows", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR__FOUND_ROWS))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarFoundRows)); + } + } } return ret; @@ -6147,6 +6173,28 @@ int ObSysVarFactory::create_sys_var(ObIAllocator &allocator_, ObSysVarClassType } break; } + case SYS_VAR__AFFECTED_ROWS: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarAffectedRows)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarAffectedRows))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarAffectedRows())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarAffectedRows", K(ret)); + } + break; + } + case SYS_VAR__FOUND_ROWS: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarFoundRows)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarFoundRows))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarFoundRows())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarFoundRows", K(ret)); + } + break; + } default: { ret = OB_ERR_UNEXPECTED; diff --git a/src/share/system_variable/ob_system_variable_factory.h b/src/share/system_variable/ob_system_variable_factory.h index 11cdb5c538..31089c65f1 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -1754,6 +1754,20 @@ public: inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LC_TIME_NAMES; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(242); } }; +class ObSysVarAffectedRows : public ObIntSysVar +{ +public: + ObSysVarAffectedRows() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR__AFFECTED_ROWS; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(243); } +}; +class ObSysVarFoundRows : public ObIntSysVar +{ +public: + ObSysVarFoundRows() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR__FOUND_ROWS; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(244); } +}; class ObSysVarFactory @@ -1774,7 +1788,7 @@ public: static const common::ObString get_sys_var_name_by_id(ObSysVarClassType sys_var_id); const static int64_t MYSQL_SYS_VARS_COUNT = 97; - const static int64_t OB_SYS_VARS_COUNT = 146; + const static int64_t OB_SYS_VARS_COUNT = 148; const static int64_t ALL_SYS_VARS_COUNT = MYSQL_SYS_VARS_COUNT + OB_SYS_VARS_COUNT; const static int64_t INVALID_MAX_READ_STALE_TIME = -1; diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index dd6e5475fc..4d02fd4256 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -3429,13 +3429,43 @@ static struct VarsInit{ ObSysVars[242].alias_ = "OB_SV_LC_TIME_NAMES" ; }(); + [&] (){ + ObSysVars[243].default_value_ = "-1" ; + ObSysVars[243].info_ = "affected rows." ; + ObSysVars[243].name_ = "_affected_rows" ; + ObSysVars[243].data_type_ = ObIntType ; + ObSysVars[243].min_val_ = "-1" ; + ObSysVars[243].max_val_ = "9223372036854775807" ; + ObSysVars[243].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INVISIBLE | ObSysVarFlag::NEED_SERIALIZE ; + ObSysVars[243].id_ = SYS_VAR__AFFECTED_ROWS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR__AFFECTED_ROWS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR__AFFECTED_ROWS] = 243 ; + ObSysVars[243].base_value_ = "-1" ; + ObSysVars[243].alias_ = "OB_SV__AFFECTED_ROWS" ; + }(); + + [&] (){ + ObSysVars[244].default_value_ = "1" ; + ObSysVars[244].info_ = "found rows." ; + ObSysVars[244].name_ = "_found_rows" ; + ObSysVars[244].data_type_ = ObIntType ; + ObSysVars[244].min_val_ = "-1" ; + ObSysVars[244].max_val_ = "9223372036854775807" ; + ObSysVars[244].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INVISIBLE | ObSysVarFlag::NEED_SERIALIZE ; + ObSysVars[244].id_ = SYS_VAR__FOUND_ROWS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR__FOUND_ROWS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR__FOUND_ROWS] = 244 ; + ObSysVars[244].base_value_ = "1" ; + ObSysVars[244].alias_ = "OB_SV__FOUND_ROWS" ; + }(); + if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) { HasInvalidSysVar = true; } } }vars_init; -static int64_t var_amount = 243; +static int64_t var_amount = 245; int64_t ObSysVariables::get_all_sys_var_count(){ return ObSysVarFactory::ALL_SYS_VARS_COUNT;} ObSysVarClassType ObSysVariables::get_sys_var_id(int64_t i){ return ObSysVars[i].id_;} diff --git a/src/share/system_variable/ob_system_variable_init.json b/src/share/system_variable/ob_system_variable_init.json index d5951f874a..7ce24d4403 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -3459,5 +3459,35 @@ "info_cn": "", "background_cn": "", "ref_url": "" + }, + "_affected_rows": { + "id": 10161, + "name": "_affected_rows", + "default_value": "-1", + "base_value": "-1", + "data_type": "int", + "info": "affected rows.", + "flags": "SESSION | INVISIBLE | NEED_SERIALIZE", + "min_val": "-1", + "max_val": "9223372036854775807", + "publish_version": "", + "info_cn": "", + "background_cn": "", + "ref_url": "" + }, + "_found_rows": { + "id": 10162, + "name": "_found_rows", + "default_value": "1", + "base_value": "1", + "data_type": "int", + "info": "found rows.", + "flags": "SESSION | INVISIBLE | NEED_SERIALIZE", + "min_val": "-1", + "max_val": "9223372036854775807", + "publish_version": "", + "info_cn": "", + "background_cn": "", + "ref_url": "" } } diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 7b15a35838..eb78d3fbcd 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -79,6 +79,8 @@ ObBasicSessionInfo::ObBasicSessionInfo(const uint64_t tenant_id) sess_bt_buff_pos_(0), sess_ref_cnt_(0), sess_ref_seq_(0), + found_rows_(1), + affected_rows_(-1), block_allocator_(SMALL_BLOCK_SIZE, common::OB_MALLOC_NORMAL_BLOCK_SIZE - 32, //这里减32是为了适配ObMalloc对齐规则, 防止超8k的内存分配 ObMalloc(lib::ObMemAttr(orig_tenant_id_, ObModIds::OB_SQL_SESSION_SBLOCK))), @@ -436,6 +438,8 @@ void ObBasicSessionInfo::reset(bool skip_sys_var) last_update_tz_time_ = 0; is_client_sessid_support_ = false; sess_bt_buff_pos_ = 0; + found_rows_ = 1; + affected_rows_ = -1; ATOMIC_SET(&sess_ref_cnt_ , 0); // 最后再重置所有allocator // 否则thread_data_.user_name_之类的属性会有野指针,在session_mgr的foreach接口遍历时可能core掉。 @@ -4396,7 +4400,9 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo) flt_vars_.row_traceformat_, flt_vars_.last_flt_span_id_, exec_min_cluster_version_, - is_client_sessid_support_); + is_client_sessid_support_, + found_rows_, + affected_rows_); }(); return ret; } @@ -4598,7 +4604,9 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo) } if (OB_SUCC(ret) && pos < data_len) { LST_DO_CODE(OB_UNIS_DECODE, - is_client_sessid_support_); + is_client_sessid_support_, + found_rows_, + affected_rows_); } // deep copy string. if (OB_SUCC(ret)) { @@ -4913,7 +4921,9 @@ OB_DEF_SERIALIZE_SIZE(ObBasicSessionInfo) flt_vars_.row_traceformat_, flt_vars_.last_flt_span_id_, exec_min_cluster_version_, - is_client_sessid_support_); + is_client_sessid_support_, + found_rows_, + affected_rows_); return len; } diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index de52b6edaf..835d77199b 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -2071,6 +2071,8 @@ private: int sess_bt_buff_pos_; int32_t sess_ref_cnt_; int32_t sess_ref_seq_; + int64_t found_rows_; + int64_t affected_rows_; protected: // alloc at most SMALL_BLOCK_SIZE bytes for each alloc() call.