From 27b9eda3c78a8b62206180502c47cd2b1bcee363 Mon Sep 17 00:00:00 2001 From: obdev Date: Sat, 26 Aug 2023 04:40:35 +0000 Subject: [PATCH] [FEAT MERGE]query_interface_enhancement --- deps/oblib/src/lib/ob_define.h | 14 + deps/oblib/src/rpc/obmysql/obsm_struct.h | 4 + .../packet/ompk_handshake_response.cpp | 38 +++ .../obmysql/packet/ompk_handshake_response.h | 2 + src/observer/CMakeLists.txt | 1 + src/observer/mysql/obmp_connect.cpp | 57 +++- src/observer/mysql/obmp_connect.h | 1 + .../virtual_table/ob_gv_sql_audit.cpp | 11 + src/observer/virtual_table/ob_gv_sql_audit.h | 1 + .../virtual_table/ob_show_processlist.cpp | 28 ++ .../virtual_table/ob_show_processlist.h | 5 +- .../virtual_table/ob_virtual_flt_config.cpp | 250 ++++++++++++++++++ .../virtual_table/ob_virtual_flt_config.h | 60 +++++ .../ob_virtual_table_iterator_factory.cpp | 12 + .../ob_inner_table_schema.10001_10050.cpp | 45 ++++ .../ob_inner_table_schema.11001_11050.cpp | 34 ++- .../ob_inner_table_schema.12401_12450.cpp | 164 ++++++++++++ .../ob_inner_table_schema.15001_15050.cpp | 79 +++++- .../ob_inner_table_schema.15401_15450.cpp | 164 ++++++++++++ .../ob_inner_table_schema.21001_21050.cpp | 2 +- .../ob_inner_table_schema.21201_21250.cpp | 2 +- .../ob_inner_table_schema.21401_21450.cpp | 50 ++++ .../ob_inner_table_schema.28001_28050.cpp | 2 +- .../ob_inner_table_schema.28101_28150.cpp | 2 +- .../ob_inner_table_schema.28151_28200.cpp | 50 ++++ src/share/inner_table/ob_inner_table_schema.h | 31 ++- .../ob_inner_table_schema_constants.h | 8 + .../inner_table/ob_inner_table_schema_def.py | 98 ++++++- .../monitor/flt/ob_flt_control_info_mgr.cpp | 39 +++ src/sql/monitor/flt/ob_flt_control_info_mgr.h | 28 ++ src/sql/monitor/ob_exec_stat.h | 1 + src/sql/session/ob_sql_session_info.cpp | 9 + .../r/mysql/inner_table_overall.result | 2 + 33 files changed, 1272 insertions(+), 22 deletions(-) create mode 100644 src/observer/virtual_table/ob_virtual_flt_config.cpp create mode 100644 src/observer/virtual_table/ob_virtual_flt_config.h diff --git a/deps/oblib/src/lib/ob_define.h b/deps/oblib/src/lib/ob_define.h index 03a0e63320..c16235598a 100644 --- a/deps/oblib/src/lib/ob_define.h +++ b/deps/oblib/src/lib/ob_define.h @@ -87,6 +87,7 @@ const int64_t OB_MAX_MOD_NAME_LENGTH = 48; const int64_t OB_MAX_ACT_NAME_LENGTH = 32; const int64_t OB_MAX_UUID_LENGTH = 16; const int64_t OB_MAX_UUID_STR_LENGTH = 36; +const int64_t OB_MAX_CON_INFO_STR_LENGTH = 512; const int64_t MAX_ZONE_LENGTH = 128; const int64_t MAX_REGION_LENGTH = 128; const int64_t MAX_GTS_NAME_LENGTH = 128; @@ -507,6 +508,14 @@ enum ObCSProtocolType OB_2_0_CS_TYPE, // oceanbase 2.0 protocol }; +enum ObClientType +{ + OB_CLIENT_INVALID_TYPE = 0, + OB_CLIENT_JDBC, // JDBC client + OB_CLIENT_OCI, // ob lib client + OB_CLIENT_NON_STANDARD // non-standard client +}; + inline const char *get_cs_protocol_type_name(const ObCSProtocolType type) { switch (type) { case OB_INVALID_CS_TYPE: @@ -1430,6 +1439,11 @@ const char *const OB_MYSQL_PROXY_SESSION_VARS = "__proxy_session_vars"; const char *const OB_MYSQL_SCRAMBLE = "__proxy_scramble"; const char *const OB_MYSQL_PROXY_VEERSION = "__proxy_version"; +const char *const OB_MYSQL_CLIENT_VERSION = "__ob_client_version"; +const char *const OB_MYSQL_CLIENT_NAME = "__ob_client_name"; + +const char *const OB_MYSQL_JDBC_CLIENT_NAME = "OceanBase Connector/J"; +const char *const OB_MYSQL_OCI_CLIENT_NAME = "OceanBase Connector/C"; // for java client const char *const OB_MYSQL_JAVA_CLIENT_MODE_NAME = "__ob_java_client"; const char *const OB_MYSQL_OCI_CLIENT_MODE_NAME = "__ob_libobclient"; diff --git a/deps/oblib/src/rpc/obmysql/obsm_struct.h b/deps/oblib/src/rpc/obmysql/obsm_struct.h index 4853d92757..ab130e430f 100644 --- a/deps/oblib/src/rpc/obmysql/obsm_struct.h +++ b/deps/oblib/src/rpc/obmysql/obsm_struct.h @@ -69,6 +69,8 @@ public: client_cs_type_ = 0; sql_req_level_ = 0; pkt_rec_wrapper_.init(); + client_type_ = common::OB_CLIENT_INVALID_TYPE; + client_version_ = 0; } obmysql::ObCompressType get_compress_type() { @@ -186,6 +188,8 @@ public: int32_t client_cs_type_; int64_t sql_req_level_; obmysql::ObPacketRecordWrapper pkt_rec_wrapper_; + ObClientType client_type_; + uint64_t client_version_; }; } // end of namespace observer } // end of namespace oceanbase diff --git a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.cpp b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.cpp index 97ca572f2f..2c0e2d77c5 100644 --- a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.cpp +++ b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.cpp @@ -370,6 +370,44 @@ bool OMPKHandshakeResponse::is_java_client_mode() const return java_client_mod; } +bool OMPKHandshakeResponse::is_ob_client_jdbc() const +{ + bool is_jdbc = false; + ObStringKV mod_kv; + mod_kv.key_.assign_ptr(OB_MYSQL_CLIENT_NAME, static_cast(strlen(OB_MYSQL_CLIENT_NAME))); + mod_kv.value_.assign_ptr(OB_MYSQL_JDBC_CLIENT_NAME, + static_cast(strlen(OB_MYSQL_JDBC_CLIENT_NAME))); + + ObStringKV kv; + for (int64_t i = 0; !is_jdbc && i < connect_attrs_.count(); ++i) { + kv = connect_attrs_.at(i); + if (mod_kv.key_ == kv.key_ && mod_kv.value_ == kv.value_) { + is_jdbc = true; + //break; + } + } + return is_jdbc; +} + +bool OMPKHandshakeResponse::is_ob_client_oci() const +{ + bool is_oci = false; + ObStringKV mod_kv; + mod_kv.key_.assign_ptr(OB_MYSQL_CLIENT_NAME, static_cast(strlen(OB_MYSQL_CLIENT_NAME))); + mod_kv.value_.assign_ptr(OB_MYSQL_OCI_CLIENT_NAME, + static_cast(strlen(OB_MYSQL_OCI_CLIENT_NAME))); + + ObStringKV kv; + for (int64_t i = 0; !is_oci && i < connect_attrs_.count(); ++i) { + kv = connect_attrs_.at(i); + if (mod_kv.key_ == kv.key_ && mod_kv.value_ == kv.value_) { + is_oci = true; + //break; + } + } + return is_oci; +} + int64_t OMPKHandshakeResponse::get_sql_request_level() const { int64_t sql_req_level = 0; // share::OBCG_DEFAULT diff --git a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.h b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.h index d2f6a4efef..0724520345 100644 --- a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.h +++ b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake_response.h @@ -60,6 +60,8 @@ public: bool is_java_client_mode() const; bool is_oci_client_mode() const; bool is_jdbc_client_mode() const; + bool is_ob_client_jdbc() const; + bool is_ob_client_oci() const; int64_t get_sql_request_level() const; inline void set_capability_flags(const ObMySQLCapabilityFlags &cap) { capability_ = cap; } diff --git a/src/observer/CMakeLists.txt b/src/observer/CMakeLists.txt index 96f94784a1..483ab4252e 100644 --- a/src/observer/CMakeLists.txt +++ b/src/observer/CMakeLists.txt @@ -385,6 +385,7 @@ ob_set_subtarget(ob_server virtual_table virtual_table/ob_all_virtual_sql_plan.cpp virtual_table/ob_all_virtual_opt_stat_gather_monitor.cpp virtual_table/ob_all_virtual_thread.cpp + virtual_table/ob_virtual_flt_config.cpp ) ob_server_add_target(ob_server) diff --git a/src/observer/mysql/obmp_connect.cpp b/src/observer/mysql/obmp_connect.cpp index 6375f332b2..3f165660f2 100644 --- a/src/observer/mysql/obmp_connect.cpp +++ b/src/observer/mysql/obmp_connect.cpp @@ -101,6 +101,14 @@ int ObMPConnect::deserialize() if (hsr_.is_jdbc_client_mode()) { conn->is_jdbc_client_ = true; } + + if (hsr_.is_ob_client_jdbc()) { + conn->client_type_ = common::OB_CLIENT_JDBC; + } else if (hsr_.is_ob_client_oci()) { + conn->client_type_ = common::OB_CLIENT_OCI; + } else { + conn->client_type_ = common::OB_CLIENT_NON_STANDARD; + } db_name_ = hsr_.get_database(); LOG_DEBUG("database name", K(hsr_.get_database())); } @@ -385,7 +393,7 @@ int ObMPConnect::process() K(from_java_client), K(from_oci_client), K(from_jdbc_client), K(capability), K(proxy_capability), K(use_ssl), "c/s protocol", get_cs_protocol_type_name(protoType), - K(autocommit), K(proc_ret), K(ret)); + K(autocommit), K(proc_ret), K(ret), K(conn->client_type_), K(conn->client_version_)); } return ret; } @@ -1667,8 +1675,13 @@ int ObMPConnect::check_client_property(ObSMConnection &conn) int ret = OB_SUCCESS; ObMySQLCapabilityFlags client_cap = hsr_.get_capability_flags(); ObString client_ip; + if (OB_FAIL(set_client_version(conn))) { + LOG_WARN("get proxy version fail", K(ret)); + } - if (conn.is_java_client_) { + if (OB_FAIL(ret)) { + // do nothing + } else if (conn.is_java_client_) { // the connection is from oceanbase-connector-java(OCJ) if (OB_FAIL(check_common_property(conn, client_cap))) { LOG_WARN("fail to check common property", K(ret)); @@ -2041,6 +2054,46 @@ int ObMPConnect::set_proxy_version(ObSMConnection &conn) return ret; } +int ObMPConnect::set_client_version(ObSMConnection &conn) +{ + int ret = OB_SUCCESS; + bool is_found = false; + ObString key_str; + const char *client_version_str = NULL; + int64_t length = 0; + key_str.assign_ptr(OB_MYSQL_CLIENT_VERSION, + static_cast(STRLEN(OB_MYSQL_CLIENT_VERSION))); + for (int64_t i = 0; !is_found && i < hsr_.get_connect_attrs().count(); ++i) { + const ObStringKV &kv = hsr_.get_connect_attrs().at(i); + if (key_str == kv.key_) { + client_version_str = kv.value_.ptr(); + length = kv.value_.length(); + is_found = true; + } + } + int64_t min_len = 5;//传过来的合法version字符串最短的为“1.1.1”,长度至少为5 + if (!is_found || OB_ISNULL(client_version_str) || length < min_len) { + conn.client_version_ = 0; + } else { + const int64_t VERSION_ITEM = 3;//版本号只需要取前三位就行,比如“1.7.6.1” 只需要取“1.7.6” 就能决定; + char buff[OB_MAX_VERSION_LENGTH]; + memset(buff, 0, OB_MAX_VERSION_LENGTH); + int64_t cur_item = 0; + for (int64_t i = 0; cur_item != VERSION_ITEM && i < length; ++i) { + if (client_version_str[i] == '.') { + ++cur_item; + } + if (cur_item != VERSION_ITEM) { + buff[i] = client_version_str[i]; + } + } + if (OB_FAIL(ObClusterVersion::get_version(buff, conn.client_version_))) { + LOG_WARN("failed to get version", K(ret)); + } else {/*do nothing*/} + } + return ret; +} + int ObMPConnect::update_charset_sys_vars(ObSMConnection &conn, ObSQLSessionInfo &sess_info) { int ret = OB_SUCCESS; diff --git a/src/observer/mysql/obmp_connect.h b/src/observer/mysql/obmp_connect.h index 6b1b0dd590..4fac421c91 100644 --- a/src/observer/mysql/obmp_connect.h +++ b/src/observer/mysql/obmp_connect.h @@ -120,6 +120,7 @@ private: #endif int set_proxy_version(ObSMConnection &conn); + int set_client_version(ObSMConnection &conn); int update_charset_sys_vars(ObSMConnection &conn, sql::ObSQLSessionInfo &sess_info); private: DISALLOW_COPY_AND_ASSIGN(ObMPConnect); diff --git a/src/observer/virtual_table/ob_gv_sql_audit.cpp b/src/observer/virtual_table/ob_gv_sql_audit.cpp index 8edaca3a72..2826213779 100644 --- a/src/observer/virtual_table/ob_gv_sql_audit.cpp +++ b/src/observer/virtual_table/ob_gv_sql_audit.cpp @@ -1033,6 +1033,17 @@ int ObGvSqlAudit::fill_cells(obmysql::ObMySQLRequestRecord &record) cells[cell_idx].set_uint64(record.data_.txn_free_route_version_); break; } + case FLT_TRACE_ID: { + if (OB_MAX_UUID_STR_LENGTH == strlen(record.data_.flt_trace_id_)) { + cells[cell_idx].set_varchar(record.data_.flt_trace_id_, + static_cast(OB_MAX_UUID_STR_LENGTH)); + } else { + cells[cell_idx].set_varchar(""); + } + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + + } break; default: { ret = OB_ERR_UNEXPECTED; SERVER_LOG(WARN, "invalid column id", K(ret), K(cell_idx), K(col_id)); diff --git a/src/observer/virtual_table/ob_gv_sql_audit.h b/src/observer/virtual_table/ob_gv_sql_audit.h index a1b90a7423..7247bb9a81 100644 --- a/src/observer/virtual_table/ob_gv_sql_audit.h +++ b/src/observer/virtual_table/ob_gv_sql_audit.h @@ -166,6 +166,7 @@ private: PARTITION_HIT, TX_INTERNAL_ROUTE_VERSION, + FLT_TRACE_ID, }; const static int64_t PRI_KEY_IP_IDX = 0; diff --git a/src/observer/virtual_table/ob_show_processlist.cpp b/src/observer/virtual_table/ob_show_processlist.cpp index c291f5cb76..50220004f7 100644 --- a/src/observer/virtual_table/ob_show_processlist.cpp +++ b/src/observer/virtual_table/ob_show_processlist.cpp @@ -17,6 +17,7 @@ //#include "sql/engine/expr/ob_expr_promotion_util.h" #include "sql/session/ob_sql_session_info.h" #include "sql/privilege_check/ob_ora_priv_check.h" +#include "lib/utility/ob_print_utils.h" using namespace oceanbase::common; namespace oceanbase @@ -380,6 +381,33 @@ bool ObShowProcesslist::FillScanner::operator()(sql::ObSQLSessionMgr::Key key, O cur_row_->cells_[cell_idx].set_int(sess_info->get_effective_tenant_id()); break; } + case LEVEL: { + cur_row_->cells_[cell_idx].set_int(sess_info->get_control_info().level_); + } break; + case SAMPLE_PERCENTAGE: { + cur_row_->cells_[cell_idx].set_int((sess_info->get_control_info().sample_pct_ == -1) + ? -1 : sess_info->get_control_info().sample_pct_*100); + } break; + case RECORD_POLICY: { + if (sess_info->get_control_info().rp_ == + sql::FLTControlInfo::RecordPolicy::RP_ALL) { + cur_row_->cells_[cell_idx].set_varchar("ALL"); + cur_row_->cells_[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else if (sess_info->get_control_info().rp_ == + sql::FLTControlInfo::RecordPolicy::RP_ONLY_SLOW_QUERY) { + cur_row_->cells_[cell_idx].set_varchar("ONLY_SLOW_QUERY"); + cur_row_->cells_[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else if (sess_info->get_control_info().rp_ == + sql::FLTControlInfo::RecordPolicy::RP_SAMPLE_AND_SLOW_QUERY) { + cur_row_->cells_[cell_idx].set_varchar("SAMPLE_AND_SLOW_QUERY"); + cur_row_->cells_[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else { + cur_row_->cells_[cell_idx].set_null(); + } + } break; default: { ret = OB_ERR_UNEXPECTED; SERVER_LOG(WARN, "invalid column id", K(ret), K(cell_idx), diff --git a/src/observer/virtual_table/ob_show_processlist.h b/src/observer/virtual_table/ob_show_processlist.h index 8f2ab2c051..fe61ec6ab2 100644 --- a/src/observer/virtual_table/ob_show_processlist.h +++ b/src/observer/virtual_table/ob_show_processlist.h @@ -69,7 +69,10 @@ private: SQL_TRACE, PLAN_ID, TENANT_ID, - EFFECTIVE_TENANT_ID + EFFECTIVE_TENANT_ID, + LEVEL, + SAMPLE_PERCENTAGE, + RECORD_POLICY }; class FillScanner { diff --git a/src/observer/virtual_table/ob_virtual_flt_config.cpp b/src/observer/virtual_table/ob_virtual_flt_config.cpp new file mode 100644 index 0000000000..cc0c1e5320 --- /dev/null +++ b/src/observer/virtual_table/ob_virtual_flt_config.cpp @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2022 OceanBase Technology Co.,Ltd. + * OceanBase is licensed under Mulan PubL v1. + * You can use this software according to the terms and conditions of the Mulan PubL v1. + * You may obtain a copy of Mulan PubL v1 at: + * http://license.coscl.org.cn/MulanPubL-1.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v1 for more details. + * --------------------------------------------------------------------------------------- + * Authors: + * Juehui <> + * --------------------------------------------------------------------------------------- + */ +#include "observer/virtual_table/ob_virtual_flt_config.h" +#include "sql/session/ob_sql_session_info.h" +#include "observer/omt/ob_multi_tenant.h" + +using namespace oceanbase::common; +using namespace oceanbase::obmysql; +using namespace oceanbase::omt; +using namespace oceanbase::share; +using namespace oceanbase::sql; +namespace oceanbase { +namespace observer { + + ObVirtualFLTConfig::ObVirtualFLTConfig(): + ObVirtualTableScannerIterator(), + rec_list_(), + rec_array_idx_(OB_INVALID_ID), + tenant_id_array_(), + tenant_id_array_idx_(0) +{ +} + +ObVirtualFLTConfig::~ObVirtualFLTConfig() { + reset(); +} + +void ObVirtualFLTConfig::reset() +{ + ObVirtualTableScannerIterator::reset(); + rec_list_.reset(); + rec_array_idx_ = OB_INVALID_ID; + tenant_id_array_.reset(); + tenant_id_array_idx_ = 0; +} + +int ObVirtualFLTConfig::inner_open() +{ + int ret = OB_SUCCESS; + // sys tenant show all tenant plan cache stat + if (is_sys_tenant(effective_tenant_id_)) { + if (OB_FAIL(GCTX.omt_->get_mtl_tenant_ids(tenant_id_array_))) { + SERVER_LOG(WARN, "failed to add tenant id", K(ret)); + } + } else { + tenant_id_array_.reset(); + // user tenant show self tenant stat + if (OB_FAIL(tenant_id_array_.push_back(effective_tenant_id_))) { + SERVER_LOG(WARN, "fail to push back effective_tenant_id_", KR(ret), K(effective_tenant_id_), + K(tenant_id_array_)); + } + } + SERVER_LOG(TRACE,"get tenant_id array", K(effective_tenant_id_), K(is_sys_tenant(effective_tenant_id_)), K(tenant_id_array_)); + return ret; +} + +int ObVirtualFLTConfig::get_row_from_tenants() +{ + int ret = OB_SUCCESS; + bool is_sub_end = false; + do { + is_sub_end = false; + if (tenant_id_array_idx_ < 0) { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "invalid tenant_id_array idx", K(ret), K(tenant_id_array_idx_)); + } else if (tenant_id_array_idx_ >= tenant_id_array_.count()) { + ret = OB_ITER_END; + tenant_id_array_idx_ = 0; + } else { + uint64_t tenant_id = tenant_id_array_.at(tenant_id_array_idx_); + MTL_SWITCH(tenant_id) { + if (OB_FAIL(get_row_from_specified_tenant(tenant_id, + is_sub_end))) { + SERVER_LOG(WARN, + "fail to insert plan by tenant id", + K(ret), + "tenant id", + tenant_id_array_.at(tenant_id_array_idx_), + K(tenant_id_array_idx_)); + } else { + if (is_sub_end) { + ++tenant_id_array_idx_; + } + } + } + } + } while(is_sub_end && OB_SUCCESS == ret); + return ret; +} + +int ObVirtualFLTConfig::get_row_from_specified_tenant(uint64_t tenant_id, bool &is_end) +{ + int ret = OB_SUCCESS; + is_end = false; + if (OB_ISNULL(allocator_)) { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "allocator is null", K(ret)); + } else if (OB_INVALID_ID == static_cast(rec_array_idx_)) { + ObFLTControlInfoManager mgr(tenant_id); + if (OB_FAIL(mgr.init())) { + SERVER_LOG(WARN,"failed to init full link trace info manager", K(ret)); + } else if (OB_FAIL(mgr.get_all_flt_config(rec_list_, *allocator_))) { + SERVER_LOG(WARN,"failed to fill flt configs", K(ret)); + } else { + rec_array_idx_ = 0; + } + } + + if (OB_SUCC(ret)) { + bool is_filled = false; + while (OB_SUCC(ret) && false == is_filled && false == is_end) { + if (rec_array_idx_ < 0) { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "invalid rec list index", K(rec_array_idx_)); + } else if (rec_array_idx_ >= rec_list_.count()) { + is_end = true; + rec_array_idx_ = OB_INVALID_ID; + rec_list_.reset(); + } else { + is_end = false; + ObFLTConfRec& rec = rec_list_.at(rec_array_idx_); + ++rec_array_idx_; + if (OB_FAIL(fill_cells(rec))) { + SERVER_LOG(WARN, "fail to fill cells", K(rec), K(tenant_id)); + } else { + is_filled = true; + } + } + } //while end + } + SERVER_LOG(TRACE, + "flt config from a tenant", + K(ret), + K(tenant_id)); + return ret; +} + +int ObVirtualFLTConfig::inner_get_next_row(common::ObNewRow *&row) +{ + int ret = OB_SUCCESS; + if (OB_FAIL(inner_get_next_row())) { + if (OB_ITER_END != ret) { + SERVER_LOG(WARN, "fail to get next row", K(ret)); + } + } else { + row = &cur_row_; + } + return ret; +} + +int ObVirtualFLTConfig::fill_cells(ObFLTConfRec &record) +{ + int ret = OB_SUCCESS; + const int64_t col_count = output_column_ids_.count(); + ObObj *cells = cur_row_.cells_; + + if (OB_ISNULL(cells)) { + ret = OB_INVALID_ARGUMENT; + SERVER_LOG(WARN, "invalid argument", K(cells)); + } else { + for (int64_t cell_idx = 0; OB_SUCC(ret) && cell_idx < col_count; cell_idx++) { + uint64_t col_id = output_column_ids_.at(cell_idx); + switch(col_id) { + case TENANT_ID: { + cells[cell_idx].set_int(record.tenant_id_); + } break; + case TYPE: { + if (record.type_ == FLT_TENANT_TYPE) { + cells[cell_idx].set_varchar("TENANT"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else if (record.type_ == FLT_MOD_ACT_TYPE) { + cells[cell_idx].set_varchar("MODULE_ACTION"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else if (record.type_ == FLT_CLIENT_ID_TYPE) { + cells[cell_idx].set_varchar("CLENT_IDENTIFIER"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else { + // do nothing + cells[cell_idx].set_varchar("INVALID TYPE"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } + } break; + case MODULE_NAME: { + cells[cell_idx].set_varchar(record.mod_name_); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } break; + case ACTION_NAME: { + cells[cell_idx].set_varchar(record.act_name_); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } break; + case CLIENT_IDENTIFIER: { + cells[cell_idx].set_varchar(record.identifier_name_); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } break; + case LEVEL: { + cells[cell_idx].set_int(record.control_info_.level_); + } break; + case SAMPLE_PERCENTAGE: { + cells[cell_idx].set_int((record.control_info_.sample_pct_ == -1) + ? -1 : record.control_info_.sample_pct_*100); + } break; + case RECORD_POLICY: { + if (record.control_info_.rp_ == sql::FLTControlInfo::RecordPolicy::RP_ALL) { + cells[cell_idx].set_varchar("ALL"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else if (record.control_info_.rp_ == sql::FLTControlInfo::RecordPolicy::RP_ONLY_SLOW_QUERY) { + cells[cell_idx].set_varchar("ONLY_SLOW_QUERY"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else if (record.control_info_.rp_ == sql::FLTControlInfo::RecordPolicy::RP_SAMPLE_AND_SLOW_QUERY) { + cells[cell_idx].set_varchar("SAMPLE_AND_SLOW_QUERY"); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } else { + // do nothing + cells[cell_idx].set_null(); + } + } break; + default: { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "invalid column id", K(ret), K(cell_idx), K(col_id)); + } break; + } + } + } + return ret; +} +} //namespace observer +} //namespace oceanbase diff --git a/src/observer/virtual_table/ob_virtual_flt_config.h b/src/observer/virtual_table/ob_virtual_flt_config.h new file mode 100644 index 0000000000..e7d13351c1 --- /dev/null +++ b/src/observer/virtual_table/ob_virtual_flt_config.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022 OceanBase Technology Co.,Ltd. + * OceanBase is licensed under Mulan PubL v1. + * You can use this software according to the terms and conditions of the Mulan PubL v1. + * You may obtain a copy of Mulan PubL v1 at: + * http://license.coscl.org.cn/MulanPubL-1.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v1 for more details. + * --------------------------------------------------------------------------------------- + * Authors: + * Juehui <> + * --------------------------------------------------------------------------------------- + */ +#ifndef OB_VIRTUAL_FLT_CONF_H_ +#define OB_VIRTUAL_FLT_CONF_H_ +#include "share/ob_virtual_table_scanner_iterator.h" +#include "sql/monitor/flt/ob_flt_control_info_mgr.h" +using namespace oceanbase::sql; +namespace oceanbase +{ +namespace observer +{ + class ObVirtualFLTConfig : public common::ObVirtualTableScannerIterator + { + public: + ObVirtualFLTConfig(); + virtual ~ObVirtualFLTConfig(); + int inner_open(); + virtual void reset(); + int inner_get_next_row() { return get_row_from_tenants(); } + int get_row_from_tenants(); + int fill_cells(ObFLTConfRec &record); + int get_row_from_specified_tenant(uint64_t tenant_id, bool &is_end); + int inner_get_next_row(common::ObNewRow *&row); + private: + enum SYS_COLUMN + { + TENANT_ID = common::OB_APP_MIN_COLUMN_ID, + TYPE, + MODULE_NAME, + ACTION_NAME, + CLIENT_IDENTIFIER, + LEVEL, + SAMPLE_PERCENTAGE, + RECORD_POLICY + }; + common::ObObj cells_[common::OB_ROW_MAX_COLUMNS_COUNT]; + //static const char FOLLOW[] = "FOLLOW"; + //static const char CHILD[] = "CHILD"; + DISALLOW_COPY_AND_ASSIGN(ObVirtualFLTConfig); + ObSEArray rec_list_; + int64_t rec_array_idx_; + common::ObSEArray tenant_id_array_; + int64_t tenant_id_array_idx_; + }; +} /* namespace observer */ +} /* namespace oceanbase */ +#endif /* OB_VIRTUAL_FLT_CONF_H_ */ diff --git a/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp b/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp index 72d61ab5a6..3c23714d36 100644 --- a/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp +++ b/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp @@ -209,6 +209,7 @@ #include "observer/virtual_table/ob_all_virtual_px_p2p_datahub.h" #include "observer/virtual_table/ob_all_virtual_ls_log_restore_status.h" #include "observer/virtual_table/ob_all_virtual_tablet_buffer_info.h" +#include "observer/virtual_table/ob_virtual_flt_config.h" namespace oceanbase { @@ -1407,6 +1408,17 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } + case OB_ALL_VIRTUAL_FLT_CONFIG_TID: + { + ObVirtualFLTConfig *flt_conf = NULL; + if (OB_FAIL(NEW_VIRTUAL_TABLE(ObVirtualFLTConfig, + flt_conf))) { + SERVER_LOG(WARN, "fail to create virtual table", K(ret)); + } else { + vt_iter = static_cast(flt_conf); + } + break; + } case OB_TENANT_VIRTUAL_CURRENT_TENANT_TID: { ObTenantVirtualCurrentTenant *curr_tenant = NULL; if (OB_FAIL(NEW_VIRTUAL_TABLE(ObTenantVirtualCurrentTenant, diff --git a/src/share/inner_table/ob_inner_table_schema.10001_10050.cpp b/src/share/inner_table/ob_inner_table_schema.10001_10050.cpp index b2d7f3e898..9389ebd090 100644 --- a/src/share/inner_table/ob_inner_table_schema.10001_10050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.10001_10050.cpp @@ -1864,6 +1864,51 @@ int ObInnerTableSchema::all_virtual_processlist_schema(ObTableSchema &table_sche false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("level", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("sample_percentage", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("record_policy", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + 32, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); diff --git a/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp b/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp index ccddfac3b5..35a19939ed 100644 --- a/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp @@ -10924,6 +10924,21 @@ int ObInnerTableSchema::all_virtual_sql_audit_schema(ObTableSchema &table_schema false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("flt_trace_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + OB_MAX_SPAN_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); @@ -12639,7 +12654,24 @@ int ObInnerTableSchema::all_virtual_sql_audit_all_virtual_sql_audit_i1_schema(Ob true);//is_storing_column } - table_schema.set_max_used_column_id(column_id + 97); + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA_WITH_COLUMN_FLAGS("flt_trace_id", //column_name + column_id + 98, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + OB_MAX_SPAN_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false,//is_nullable + false,//is_autoincrement + false,//is_hidden + true);//is_storing_column + } + + table_schema.set_max_used_column_id(column_id + 98); return ret; } diff --git a/src/share/inner_table/ob_inner_table_schema.12401_12450.cpp b/src/share/inner_table/ob_inner_table_schema.12401_12450.cpp index fe70e68901..2a1041482f 100644 --- a/src/share/inner_table/ob_inner_table_schema.12401_12450.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12401_12450.cpp @@ -1643,6 +1643,170 @@ int ObInnerTableSchema::all_virtual_balance_group_ls_stat_schema(ObTableSchema & return ret; } +int ObInnerTableSchema::all_virtual_flt_config_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_SYS_DATABASE_ID); + table_schema.set_table_id(OB_ALL_VIRTUAL_FLT_CONFIG_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(VIRTUAL_TABLE); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_ALL_VIRTUAL_FLT_CONFIG_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("tenant_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("type", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + 16, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("module_name", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + MAX_VALUE_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("action_name", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + MAX_VALUE_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("client_identifier", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + OB_MAX_CONTEXT_CLIENT_IDENTIFIER_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("level", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("sample_percentage", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("record_policy", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + 32, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + table_schema.set_index_using_type(USING_HASH); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema.15001_15050.cpp b/src/share/inner_table/ob_inner_table_schema.15001_15050.cpp index c068b2800e..fd39e63a90 100644 --- a/src/share/inner_table/ob_inner_table_schema.15001_15050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15001_15050.cpp @@ -1513,6 +1513,21 @@ int ObInnerTableSchema::all_virtual_sql_audit_ora_schema(ObTableSchema &table_sc false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FLT_TRACE_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_SPAN_LENGTH, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); @@ -3228,7 +3243,24 @@ int ObInnerTableSchema::all_virtual_sql_audit_ora_all_virtual_sql_audit_i1_schem true);//is_storing_column } - table_schema.set_max_used_column_id(column_id + 97); + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA_WITH_COLUMN_FLAGS("FLT_TRACE_ID", //column_name + column_id + 98, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_SPAN_LENGTH, //column_length + 2, //column_precision + -1, //column_scale + false,//is_nullable + false,//is_autoincrement + false,//is_hidden + true);//is_storing_column + } + + table_schema.set_max_used_column_id(column_id + 98); return ret; } @@ -8488,6 +8520,51 @@ int ObInnerTableSchema::all_virtual_processlist_ora_schema(ObTableSchema &table_ false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("LEVEL", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("SAMPLE_PERCENTAGE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("RECORD_POLICY", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + 32, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); diff --git a/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp b/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp index 2f54ec4667..c5e23c480f 100644 --- a/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp @@ -174,6 +174,170 @@ int ObInnerTableSchema::all_virtual_ls_real_agent_ora_schema(ObTableSchema &tabl return ret; } +int ObInnerTableSchema::all_virtual_flt_config_ora_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_ORA_SYS_DATABASE_ID); + table_schema.set_table_id(OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(VIRTUAL_TABLE); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCollationType::CS_TYPE_UTF8MB4_BIN); + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("TENANT_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("TYPE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + 16, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("MODULE_NAME", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + MAX_VALUE_LENGTH, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("ACTION_NAME", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + MAX_VALUE_LENGTH, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("CLIENT_IDENTIFIER", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONTEXT_CLIENT_IDENTIFIER_LENGTH, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("LEVEL", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("SAMPLE_PERCENTAGE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("RECORD_POLICY", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + 32, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + table_schema.set_index_using_type(USING_HASH); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp b/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp index 3718e0c2b9..9818a36f51 100644 --- a/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp @@ -760,7 +760,7 @@ int ObInnerTableSchema::gv_ob_sql_audit_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(select svr_ip as SVR_IP, svr_port as SVR_PORT, request_id as REQUEST_ID, execution_id as SQL_EXEC_ID, trace_id as TRACE_ID, session_id as SID, client_ip as CLIENT_IP, client_port as CLIENT_PORT, tenant_id as TENANT_ID, tenant_name as TENANT_NAME, effective_tenant_id as EFFECTIVE_TENANT_ID, user_id as USER_ID, user_name as USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id as DB_ID, db_name as DB_NAME, sql_id as SQL_ID, query_sql as QUERY_SQL, plan_id as PLAN_ID, affected_rows as AFFECTED_ROWS, return_rows as RETURN_ROWS, partition_cnt as PARTITION_CNT, ret_code as RET_CODE, qc_id as QC_ID, dfo_id as DFO_ID, sqc_id as SQC_ID, worker_id as WORKER_ID, event as EVENT, p1text as P1TEXT, p1 as P1, p2text as P2TEXT, p2 as P2, p3text as P3TEXT, p3 as P3, `level` as `LEVEL`, wait_class_id as WAIT_CLASS_ID, `wait_class#` as `WAIT_CLASS#`, wait_class as WAIT_CLASS, state as STATE, wait_time_micro as WAIT_TIME_MICRO, total_wait_time_micro as TOTAL_WAIT_TIME_MICRO, total_waits as TOTAL_WAITS, rpc_count as RPC_COUNT, plan_type as PLAN_TYPE, is_inner_sql as IS_INNER_SQL, is_executor_rpc as IS_EXECUTOR_RPC, is_hit_plan as IS_HIT_PLAN, request_time as REQUEST_TIME, elapsed_time as ELAPSED_TIME, net_time as NET_TIME, net_wait_time as NET_WAIT_TIME, queue_time as QUEUE_TIME, decode_time as DECODE_TIME, get_plan_time as GET_PLAN_TIME, execute_time as EXECUTE_TIME, application_wait_time as APPLICATION_WAIT_TIME, concurrency_wait_time as CONCURRENCY_WAIT_TIME, user_io_wait_time as USER_IO_WAIT_TIME, schedule_time as SCHEDULE_TIME, row_cache_hit as ROW_CACHE_HIT, bloom_filter_cache_hit as BLOOM_FILTER_CACHE_HIT, block_cache_hit as BLOCK_CACHE_HIT, disk_reads as DISK_READS, retry_cnt as RETRY_CNT, table_scan as TABLE_SCAN, consistency_level as CONSISTENCY_LEVEL, memstore_read_row_count as MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count as SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used as REQUEST_MEMORY_USED, expected_worker_count as EXPECTED_WORKER_COUNT, used_worker_count as USED_WORKER_COUNT, sched_info as SCHED_INFO, fuse_row_cache_hit as FUSE_ROW_CACHE_HIT, ps_client_stmt_id as PS_CLIENT_STMT_ID, ps_inner_stmt_id as PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, lock_for_read_time as LOCK_FOR_READ_TIME, params_value as PARAMS_VALUE, rule_name as RULE_NAME, partition_hit as PARTITION_HIT, case when tx_internal_route_flag & 96 = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION from oceanbase.__all_virtual_sql_audit )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select svr_ip as SVR_IP, svr_port as SVR_PORT, request_id as REQUEST_ID, execution_id as SQL_EXEC_ID, trace_id as TRACE_ID, session_id as SID, client_ip as CLIENT_IP, client_port as CLIENT_PORT, tenant_id as TENANT_ID, tenant_name as TENANT_NAME, effective_tenant_id as EFFECTIVE_TENANT_ID, user_id as USER_ID, user_name as USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id as DB_ID, db_name as DB_NAME, sql_id as SQL_ID, query_sql as QUERY_SQL, plan_id as PLAN_ID, affected_rows as AFFECTED_ROWS, return_rows as RETURN_ROWS, partition_cnt as PARTITION_CNT, ret_code as RET_CODE, qc_id as QC_ID, dfo_id as DFO_ID, sqc_id as SQC_ID, worker_id as WORKER_ID, event as EVENT, p1text as P1TEXT, p1 as P1, p2text as P2TEXT, p2 as P2, p3text as P3TEXT, p3 as P3, `level` as `LEVEL`, wait_class_id as WAIT_CLASS_ID, `wait_class#` as `WAIT_CLASS#`, wait_class as WAIT_CLASS, state as STATE, wait_time_micro as WAIT_TIME_MICRO, total_wait_time_micro as TOTAL_WAIT_TIME_MICRO, total_waits as TOTAL_WAITS, rpc_count as RPC_COUNT, plan_type as PLAN_TYPE, is_inner_sql as IS_INNER_SQL, is_executor_rpc as IS_EXECUTOR_RPC, is_hit_plan as IS_HIT_PLAN, request_time as REQUEST_TIME, elapsed_time as ELAPSED_TIME, net_time as NET_TIME, net_wait_time as NET_WAIT_TIME, queue_time as QUEUE_TIME, decode_time as DECODE_TIME, get_plan_time as GET_PLAN_TIME, execute_time as EXECUTE_TIME, application_wait_time as APPLICATION_WAIT_TIME, concurrency_wait_time as CONCURRENCY_WAIT_TIME, user_io_wait_time as USER_IO_WAIT_TIME, schedule_time as SCHEDULE_TIME, row_cache_hit as ROW_CACHE_HIT, bloom_filter_cache_hit as BLOOM_FILTER_CACHE_HIT, block_cache_hit as BLOCK_CACHE_HIT, disk_reads as DISK_READS, retry_cnt as RETRY_CNT, table_scan as TABLE_SCAN, consistency_level as CONSISTENCY_LEVEL, memstore_read_row_count as MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count as SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used as REQUEST_MEMORY_USED, expected_worker_count as EXPECTED_WORKER_COUNT, used_worker_count as USED_WORKER_COUNT, sched_info as SCHED_INFO, fuse_row_cache_hit as FUSE_ROW_CACHE_HIT, ps_client_stmt_id as PS_CLIENT_STMT_ID, ps_inner_stmt_id as PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, lock_for_read_time as LOCK_FOR_READ_TIME, params_value as PARAMS_VALUE, rule_name as RULE_NAME, partition_hit as PARTITION_HIT, case when tx_internal_route_flag & 96 = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION, flt_trace_id as FLT_TRACE_ID from oceanbase.__all_virtual_sql_audit )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp index 8fcafe734c..bf78e4145b 100644 --- a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp @@ -1060,7 +1060,7 @@ int ObInnerTableSchema::gv_ob_processlist_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, SQL_PORT, ID, USER, HOST, DB, TENANT, COMMAND, TIME, TOTAL_TIME, STATE, INFO, PROXY_SESSID, MASTER_SESSID, USER_CLIENT_IP, USER_HOST, RETRY_CNT, RETRY_INFO, SQL_ID, TRANS_ID, THREAD_ID, SSL_CIPHER, TRACE_ID, TRANS_STATE, ACTION, MODULE, CLIENT_INFO FROM oceanbase.__all_virtual_processlist )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, SQL_PORT, ID, USER, HOST, DB, TENANT, COMMAND, TIME, TOTAL_TIME, STATE, INFO, PROXY_SESSID, MASTER_SESSID, USER_CLIENT_IP, USER_HOST, RETRY_CNT, RETRY_INFO, SQL_ID, TRANS_ID, THREAD_ID, SSL_CIPHER, TRACE_ID, TRANS_STATE, ACTION, MODULE, CLIENT_INFO, LEVEL, SAMPLE_PERCENTAGE, RECORD_POLICY FROM oceanbase.__all_virtual_processlist )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21401_21450.cpp b/src/share/inner_table/ob_inner_table_schema.21401_21450.cpp index e80f4708e6..ba60f4634f 100644 --- a/src/share/inner_table/ob_inner_table_schema.21401_21450.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21401_21450.cpp @@ -1625,6 +1625,56 @@ int ObInnerTableSchema::cdb_ob_tenant_event_history_schema(ObTableSchema &table_ return ret; } +int ObInnerTableSchema::gv_ob_flt_trace_config_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_SYS_DATABASE_ID); + table_schema.set_table_id(OB_GV_OB_FLT_TRACE_CONFIG_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_GV_OB_FLT_TRACE_CONFIG_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT a.TENANT_ID, TYPE, TENANT_NAME, MODULE_NAME, ACTION_NAME, CLIENT_IDENTIFIER, LEVEL, SAMPLE_PERCENTAGE, RECORD_POLICY FROM OCEANBASE.__all_virtual_flt_config a, OCEANBASE.DBA_OB_TENANTS b WHERE a.tenant_id = b.tenant_id )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp b/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp index de5794267c..5ea0b2b7e2 100644 --- a/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp @@ -60,7 +60,7 @@ int ObInnerTableSchema::gv_ob_sql_audit_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT svr_ip SVR_IP, svr_port SVR_PORT, request_id REQUEST_ID, execution_id SQL_EXEC_ID, trace_id TRACE_ID, session_id SID, client_ip CLIENT_IP, client_port CLIENT_PORT, tenant_id TENANT_ID, effective_tenant_id EFFECTIVE_TENANT_ID, tenant_name TENANT_NAME, user_id USER_ID, user_name USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id DB_ID, db_name DB_NAME, sql_id SQL_ID, query_sql QUERY_SQL, plan_id PLAN_ID, affected_rows AFFECTED_ROWS, return_rows RETURN_ROWS, partition_cnt PARTITION_CNT, ret_code RET_CODE, qc_id QC_ID, dfo_id DFO_ID, sqc_id SQC_ID, worker_id WORKER_ID, event EVENT, p1text P1TEXT, p1 P1, p2text P2TEXT, p2 P2, p3text P3TEXT, p3 P3, "LEVEL" "LEVEL", wait_class_id WAIT_CLASS_ID, "WAIT_CLASS#" "WAIT_CLASS#", wait_class WAIT_CLASS, state STATE, wait_time_micro WAIT_TIME_MICRO, total_wait_time_micro TOTAL_WAIT_TIME_MICRO, total_waits TOTAL_WAITS, rpc_count RPC_COUNT, plan_type PLAN_TYPE, is_inner_sql IS_INNER_SQL, is_executor_rpc IS_EXECUTOR_RPC, is_hit_plan IS_HIT_PLAN, request_time REQUEST_TIME, elapsed_time ELAPSED_TIME, net_time NET_TIME, net_wait_time NET_WAIT_TIME, queue_time QUEUE_TIME, decode_time DECODE_TIME, get_plan_time GET_PLAN_TIME, execute_time EXECUTE_TIME, application_wait_time APPLICATION_WAIT_TIME, concurrency_wait_time CONCURRENCY_WAIT_TIME, user_io_wait_time USER_IO_WAIT_TIME, schedule_time SCHEDULE_TIME, row_cache_hit ROW_CACHE_HIT, bloom_filter_cache_hit BLOOM_FILTER_CACHE_HIT, block_cache_hit BLOCK_CACHE_HIT, disk_reads DISK_READS, retry_cnt RETRY_CNT, table_scan TABLE_SCAN, consistency_level CONSISTENCY_LEVEL, memstore_read_row_count MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used REQUEST_MEMORY_USED, expected_worker_count EXPECTED_WORKER_COUNT, used_worker_count USED_WORKER_COUNT, sched_info SCHED_INFO, ps_client_stmt_id PS_CLIENT_STMT_ID, ps_inner_stmt_id PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, params_value as PARAMS_VALUE, rule_name as RULE_NAME, case when bitand(tx_internal_route_flag, 96) = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION FROM SYS.ALL_VIRTUAL_SQL_AUDIT )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT svr_ip SVR_IP, svr_port SVR_PORT, request_id REQUEST_ID, execution_id SQL_EXEC_ID, trace_id TRACE_ID, session_id SID, client_ip CLIENT_IP, client_port CLIENT_PORT, tenant_id TENANT_ID, effective_tenant_id EFFECTIVE_TENANT_ID, tenant_name TENANT_NAME, user_id USER_ID, user_name USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id DB_ID, db_name DB_NAME, sql_id SQL_ID, query_sql QUERY_SQL, plan_id PLAN_ID, affected_rows AFFECTED_ROWS, return_rows RETURN_ROWS, partition_cnt PARTITION_CNT, ret_code RET_CODE, qc_id QC_ID, dfo_id DFO_ID, sqc_id SQC_ID, worker_id WORKER_ID, event EVENT, p1text P1TEXT, p1 P1, p2text P2TEXT, p2 P2, p3text P3TEXT, p3 P3, "LEVEL" "LEVEL", wait_class_id WAIT_CLASS_ID, "WAIT_CLASS#" "WAIT_CLASS#", wait_class WAIT_CLASS, state STATE, wait_time_micro WAIT_TIME_MICRO, total_wait_time_micro TOTAL_WAIT_TIME_MICRO, total_waits TOTAL_WAITS, rpc_count RPC_COUNT, plan_type PLAN_TYPE, is_inner_sql IS_INNER_SQL, is_executor_rpc IS_EXECUTOR_RPC, is_hit_plan IS_HIT_PLAN, request_time REQUEST_TIME, elapsed_time ELAPSED_TIME, net_time NET_TIME, net_wait_time NET_WAIT_TIME, queue_time QUEUE_TIME, decode_time DECODE_TIME, get_plan_time GET_PLAN_TIME, execute_time EXECUTE_TIME, application_wait_time APPLICATION_WAIT_TIME, concurrency_wait_time CONCURRENCY_WAIT_TIME, user_io_wait_time USER_IO_WAIT_TIME, schedule_time SCHEDULE_TIME, row_cache_hit ROW_CACHE_HIT, bloom_filter_cache_hit BLOOM_FILTER_CACHE_HIT, block_cache_hit BLOCK_CACHE_HIT, disk_reads DISK_READS, retry_cnt RETRY_CNT, table_scan TABLE_SCAN, consistency_level CONSISTENCY_LEVEL, memstore_read_row_count MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used REQUEST_MEMORY_USED, expected_worker_count EXPECTED_WORKER_COUNT, used_worker_count USED_WORKER_COUNT, sched_info SCHED_INFO, ps_client_stmt_id PS_CLIENT_STMT_ID, ps_inner_stmt_id PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, params_value as PARAMS_VALUE, rule_name as RULE_NAME, case when bitand(tx_internal_route_flag, 96) = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION, flt_trace_id as FLT_TRACE_ID FROM SYS.ALL_VIRTUAL_SQL_AUDIT )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp b/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp index 46fdb2f951..35ae5e7a4b 100644 --- a/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp @@ -960,7 +960,7 @@ int ObInnerTableSchema::gv_ob_processlist_ora_schema(ObTableSchema &table_schema table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, SQL_PORT, ID, "USER", HOST, DB, TENANT, COMMAND, TIME, TOTAL_TIME, STATE, INFO, PROXY_SESSID, MASTER_SESSID, USER_CLIENT_IP, USER_HOST, RETRY_CNT, RETRY_INFO, SQL_ID, TRANS_ID, THREAD_ID, SSL_CIPHER, TRACE_ID, TRANS_STATE, ACTION, MODULE, CLIENT_INFO FROM SYS.ALL_VIRTUAL_PROCESSLIST )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, SQL_PORT, ID, "USER", HOST, DB, TENANT, COMMAND, TIME, TOTAL_TIME, STATE, INFO, PROXY_SESSID, MASTER_SESSID, USER_CLIENT_IP, USER_HOST, RETRY_CNT, RETRY_INFO, SQL_ID, TRANS_ID, THREAD_ID, SSL_CIPHER, TRACE_ID, TRANS_STATE, ACTION, MODULE, CLIENT_INFO, "LEVEL", SAMPLE_PERCENTAGE, RECORD_POLICY FROM SYS.ALL_VIRTUAL_PROCESSLIST )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp b/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp index a53c2502c5..b8ad78ad5f 100644 --- a/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp @@ -1475,6 +1475,56 @@ int ObInnerTableSchema::v_ob_ls_log_restore_status_ora_schema(ObTableSchema &tab return ret; } +int ObInnerTableSchema::gv_ob_flt_trace_config_ora_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_ORA_SYS_DATABASE_ID); + table_schema.set_table_id(OB_GV_OB_FLT_TRACE_CONFIG_ORA_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_GV_OB_FLT_TRACE_CONFIG_ORA_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT a.TENANT_ID, TYPE, TENANT_NAME, MODULE_NAME, ACTION_NAME, CLIENT_IDENTIFIER, "LEVEL", SAMPLE_PERCENTAGE, RECORD_POLICY FROM SYS.ALL_VIRTUAL_FLT_CONFIG a, SYS.DBA_OB_TENANTS b WHERE a.TENANT_ID = b.TENANT_ID; )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::all_table_idx_data_table_id_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.h b/src/share/inner_table/ob_inner_table_schema.h index 2714b37a4f..43ec079113 100644 --- a/src/share/inner_table/ob_inner_table_schema.h +++ b/src/share/inner_table/ob_inner_table_schema.h @@ -923,6 +923,7 @@ public: static int all_virtual_tenant_event_history_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_balance_task_helper_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_balance_group_ls_stat_schema(share::schema::ObTableSchema &table_schema); + static int all_virtual_flt_config_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_sql_audit_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_plan_stat_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_plan_cache_plan_explain_ora_schema(share::schema::ObTableSchema &table_schema); @@ -1160,6 +1161,7 @@ public: static int all_virtual_wr_control_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_tenant_event_history_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_ls_real_agent_ora_schema(share::schema::ObTableSchema &table_schema); + static int all_virtual_flt_config_ora_schema(share::schema::ObTableSchema &table_schema); static int gv_ob_plan_cache_stat_schema(share::schema::ObTableSchema &table_schema); static int gv_ob_plan_cache_plan_stat_schema(share::schema::ObTableSchema &table_schema); static int schemata_schema(share::schema::ObTableSchema &table_schema); @@ -1504,6 +1506,7 @@ public: static int cdb_ob_ls_history_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_tenant_event_history_schema(share::schema::ObTableSchema &table_schema); static int cdb_ob_tenant_event_history_schema(share::schema::ObTableSchema &table_schema); + static int gv_ob_flt_trace_config_schema(share::schema::ObTableSchema &table_schema); static int dba_synonyms_schema(share::schema::ObTableSchema &table_schema); static int dba_objects_ora_schema(share::schema::ObTableSchema &table_schema); static int all_objects_schema(share::schema::ObTableSchema &table_schema); @@ -1915,6 +1918,7 @@ public: static int v_ob_arbitration_service_status_ora_schema(share::schema::ObTableSchema &table_schema); static int v_ob_timestamp_service_ora_schema(share::schema::ObTableSchema &table_schema); static int v_ob_ls_log_restore_status_ora_schema(share::schema::ObTableSchema &table_schema); + static int gv_ob_flt_trace_config_ora_schema(share::schema::ObTableSchema &table_schema); static int all_table_aux_lob_meta_schema(share::schema::ObTableSchema &table_schema); static int all_column_aux_lob_meta_schema(share::schema::ObTableSchema &table_schema); static int all_ddl_operation_aux_lob_meta_schema(share::schema::ObTableSchema &table_schema); @@ -3253,6 +3257,7 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_tenant_event_history_schema, ObInnerTableSchema::all_virtual_balance_task_helper_schema, ObInnerTableSchema::all_virtual_balance_group_ls_stat_schema, + ObInnerTableSchema::all_virtual_flt_config_schema, ObInnerTableSchema::all_virtual_ash_all_virtual_ash_i1_schema, ObInnerTableSchema::all_virtual_sql_plan_monitor_all_virtual_sql_plan_monitor_i1_schema, ObInnerTableSchema::all_virtual_sql_audit_all_virtual_sql_audit_i1_schema, @@ -3500,6 +3505,7 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_wr_control_ora_schema, ObInnerTableSchema::all_virtual_tenant_event_history_ora_schema, ObInnerTableSchema::all_virtual_ls_real_agent_ora_schema, + ObInnerTableSchema::all_virtual_flt_config_ora_schema, ObInnerTableSchema::all_virtual_table_real_agent_ora_idx_data_table_id_real_agent_schema, ObInnerTableSchema::all_virtual_table_real_agent_ora_idx_db_tb_name_real_agent_schema, ObInnerTableSchema::all_virtual_table_real_agent_ora_idx_tb_name_real_agent_schema, @@ -3926,6 +3932,7 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::cdb_ob_ls_history_schema, ObInnerTableSchema::dba_ob_tenant_event_history_schema, ObInnerTableSchema::cdb_ob_tenant_event_history_schema, + ObInnerTableSchema::gv_ob_flt_trace_config_schema, ObInnerTableSchema::dba_synonyms_schema, ObInnerTableSchema::dba_objects_ora_schema, ObInnerTableSchema::all_objects_schema, @@ -4337,6 +4344,7 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::v_ob_arbitration_service_status_ora_schema, ObInnerTableSchema::v_ob_timestamp_service_ora_schema, ObInnerTableSchema::v_ob_ls_log_restore_status_ora_schema, + ObInnerTableSchema::gv_ob_flt_trace_config_ora_schema, NULL,}; const schema_create_func core_index_table_schema_creators [] = { @@ -4862,6 +4870,7 @@ const uint64_t tenant_space_tables [] = { OB_ALL_VIRTUAL_TENANT_PARAMETER_TID, OB_ALL_VIRTUAL_WR_CONTROL_TID, OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_TID, + OB_ALL_VIRTUAL_FLT_CONFIG_TID, OB_ALL_VIRTUAL_SQL_AUDIT_ORA_TID, OB_ALL_VIRTUAL_SQL_AUDIT_ORA_ALL_VIRTUAL_SQL_AUDIT_I1_TID, OB_ALL_VIRTUAL_PLAN_STAT_ORA_TID, @@ -5108,6 +5117,7 @@ const uint64_t tenant_space_tables [] = { OB_ALL_VIRTUAL_WR_CONTROL_ORA_TID, OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_ORA_TID, OB_ALL_VIRTUAL_LS_REAL_AGENT_ORA_TID, + OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TID, OB_GV_OB_PLAN_CACHE_STAT_TID, OB_GV_OB_PLAN_CACHE_PLAN_STAT_TID, OB_SCHEMATA_TID, @@ -5358,6 +5368,7 @@ const uint64_t tenant_space_tables [] = { OB_DBA_WR_CONTROL_TID, OB_DBA_OB_LS_HISTORY_TID, OB_DBA_OB_TENANT_EVENT_HISTORY_TID, + OB_GV_OB_FLT_TRACE_CONFIG_TID, OB_DBA_SYNONYMS_TID, OB_DBA_OBJECTS_ORA_TID, OB_ALL_OBJECTS_TID, @@ -5769,6 +5780,7 @@ const uint64_t tenant_space_tables [] = { OB_V_OB_ARBITRATION_SERVICE_STATUS_ORA_TID, OB_V_OB_TIMESTAMP_SERVICE_ORA_TID, OB_V_OB_LS_LOG_RESTORE_STATUS_ORA_TID, + OB_GV_OB_FLT_TRACE_CONFIG_ORA_TID, OB_ALL_TABLE_IDX_DATA_TABLE_ID_TID, OB_ALL_TABLE_IDX_DB_TB_NAME_TID, OB_ALL_TABLE_IDX_TB_NAME_TID, @@ -6515,7 +6527,8 @@ const uint64_t all_ora_mapping_virtual_table_org_tables [] = { OB_ALL_VIRTUAL_LS_LOG_RESTORE_STATUS_TID, OB_ALL_VIRTUAL_TENANT_PARAMETER_TID, OB_ALL_VIRTUAL_WR_CONTROL_TID, - OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_TID, }; + OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_TID, + OB_ALL_VIRTUAL_FLT_CONFIG_TID, }; const uint64_t all_ora_mapping_virtual_tables [] = { OB_ALL_VIRTUAL_SQL_AUDIT_ORA_TID , OB_ALL_VIRTUAL_PLAN_STAT_ORA_TID @@ -6646,6 +6659,7 @@ const uint64_t all_ora_mapping_virtual_tables [] = { OB_ALL_VIRTUAL_SQL_AUDIT_O , OB_ALL_VIRTUAL_TENANT_PARAMETER_ORA_TID , OB_ALL_VIRTUAL_WR_CONTROL_ORA_TID , OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_ORA_TID +, OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TID , }; /* start/end_pos is start/end postition for column with tenant id */ @@ -7076,6 +7090,7 @@ const char* const tenant_space_table_names [] = { OB_ALL_VIRTUAL_TENANT_PARAMETER_TNAME, OB_ALL_VIRTUAL_WR_CONTROL_TNAME, OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_TNAME, + OB_ALL_VIRTUAL_FLT_CONFIG_TNAME, OB_ALL_VIRTUAL_SQL_AUDIT_ORA_TNAME, OB_ALL_VIRTUAL_SQL_AUDIT_ORA_ALL_VIRTUAL_SQL_AUDIT_I1_TNAME, OB_ALL_VIRTUAL_PLAN_STAT_ORA_TNAME, @@ -7322,6 +7337,7 @@ const char* const tenant_space_table_names [] = { OB_ALL_VIRTUAL_WR_CONTROL_ORA_TNAME, OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_ORA_TNAME, OB_ALL_VIRTUAL_LS_REAL_AGENT_ORA_TNAME, + OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TNAME, OB_GV_OB_PLAN_CACHE_STAT_TNAME, OB_GV_OB_PLAN_CACHE_PLAN_STAT_TNAME, OB_SCHEMATA_TNAME, @@ -7572,6 +7588,7 @@ const char* const tenant_space_table_names [] = { OB_DBA_WR_CONTROL_TNAME, OB_DBA_OB_LS_HISTORY_TNAME, OB_DBA_OB_TENANT_EVENT_HISTORY_TNAME, + OB_GV_OB_FLT_TRACE_CONFIG_TNAME, OB_DBA_SYNONYMS_TNAME, OB_DBA_OBJECTS_ORA_TNAME, OB_ALL_OBJECTS_TNAME, @@ -7983,6 +8000,7 @@ const char* const tenant_space_table_names [] = { OB_V_OB_ARBITRATION_SERVICE_STATUS_ORA_TNAME, OB_V_OB_TIMESTAMP_SERVICE_ORA_TNAME, OB_V_OB_LS_LOG_RESTORE_STATUS_ORA_TNAME, + OB_GV_OB_FLT_TRACE_CONFIG_ORA_TNAME, OB_ALL_TABLE_IDX_DATA_TABLE_ID_TNAME, OB_ALL_TABLE_IDX_DB_TB_NAME_TNAME, OB_ALL_TABLE_IDX_TB_NAME_TNAME, @@ -8916,7 +8934,8 @@ const uint64_t restrict_access_virtual_tables[] = { OB_ALL_VIRTUAL_TIMESTAMP_SERVICE_ORA_TID, OB_ALL_VIRTUAL_LS_LOG_RESTORE_STATUS_ORA_TID, OB_ALL_VIRTUAL_TENANT_PARAMETER_ORA_TID, - OB_ALL_VIRTUAL_WR_CONTROL_ORA_TID }; + OB_ALL_VIRTUAL_WR_CONTROL_ORA_TID, + OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TID }; static inline bool is_restrict_access_virtual_table(const uint64_t tid) @@ -11101,11 +11120,11 @@ static inline int get_sys_table_lob_aux_schema(const uint64_t tid, const int64_t OB_CORE_TABLE_COUNT = 4; const int64_t OB_SYS_TABLE_COUNT = 247; -const int64_t OB_VIRTUAL_TABLE_COUNT = 713; -const int64_t OB_SYS_VIEW_COUNT = 755; -const int64_t OB_SYS_TENANT_TABLE_COUNT = 1720; +const int64_t OB_VIRTUAL_TABLE_COUNT = 715; +const int64_t OB_SYS_VIEW_COUNT = 757; +const int64_t OB_SYS_TENANT_TABLE_COUNT = 1724; const int64_t OB_CORE_SCHEMA_VERSION = 1; -const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 1723; +const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 1727; } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema_constants.h b/src/share/inner_table/ob_inner_table_schema_constants.h index 4f623d1120..927027e733 100644 --- a/src/share/inner_table/ob_inner_table_schema_constants.h +++ b/src/share/inner_table/ob_inner_table_schema_constants.h @@ -665,6 +665,7 @@ const uint64_t OB_ALL_VIRTUAL_WR_CONTROL_TID = 12414; // "__all_virtual_wr_contr const uint64_t OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_TID = 12415; // "__all_virtual_tenant_event_history" const uint64_t OB_ALL_VIRTUAL_BALANCE_TASK_HELPER_TID = 12416; // "__all_virtual_balance_task_helper" const uint64_t OB_ALL_VIRTUAL_BALANCE_GROUP_LS_STAT_TID = 12417; // "__all_virtual_balance_group_ls_stat" +const uint64_t OB_ALL_VIRTUAL_FLT_CONFIG_TID = 12420; // "__all_virtual_flt_config" const uint64_t OB_ALL_VIRTUAL_SQL_AUDIT_ORA_TID = 15009; // "ALL_VIRTUAL_SQL_AUDIT_ORA" const uint64_t OB_ALL_VIRTUAL_PLAN_STAT_ORA_TID = 15010; // "ALL_VIRTUAL_PLAN_STAT_ORA" const uint64_t OB_ALL_VIRTUAL_PLAN_CACHE_PLAN_EXPLAIN_ORA_TID = 15012; // "ALL_VIRTUAL_PLAN_CACHE_PLAN_EXPLAIN_ORA" @@ -902,6 +903,7 @@ const uint64_t OB_ALL_VIRTUAL_TENANT_PARAMETER_ORA_TID = 15388; // "ALL_VIRTUAL_ const uint64_t OB_ALL_VIRTUAL_WR_CONTROL_ORA_TID = 15398; // "ALL_VIRTUAL_WR_CONTROL_ORA" const uint64_t OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_ORA_TID = 15399; // "ALL_VIRTUAL_TENANT_EVENT_HISTORY_ORA" const uint64_t OB_ALL_VIRTUAL_LS_REAL_AGENT_ORA_TID = 15402; // "ALL_VIRTUAL_LS_REAL_AGENT_ORA" +const uint64_t OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TID = 15403; // "ALL_VIRTUAL_FLT_CONFIG_ORA" const uint64_t OB_GV_OB_PLAN_CACHE_STAT_TID = 20001; // "GV$OB_PLAN_CACHE_STAT" const uint64_t OB_GV_OB_PLAN_CACHE_PLAN_STAT_TID = 20002; // "GV$OB_PLAN_CACHE_PLAN_STAT" const uint64_t OB_SCHEMATA_TID = 20003; // "SCHEMATA" @@ -1246,6 +1248,7 @@ const uint64_t OB_DBA_OB_LS_HISTORY_TID = 21445; // "DBA_OB_LS_HISTORY" const uint64_t OB_CDB_OB_LS_HISTORY_TID = 21446; // "CDB_OB_LS_HISTORY" const uint64_t OB_DBA_OB_TENANT_EVENT_HISTORY_TID = 21447; // "DBA_OB_TENANT_EVENT_HISTORY" const uint64_t OB_CDB_OB_TENANT_EVENT_HISTORY_TID = 21448; // "CDB_OB_TENANT_EVENT_HISTORY" +const uint64_t OB_GV_OB_FLT_TRACE_CONFIG_TID = 21449; // "GV$OB_FLT_TRACE_CONFIG" const uint64_t OB_DBA_SYNONYMS_TID = 25001; // "DBA_SYNONYMS" const uint64_t OB_DBA_OBJECTS_ORA_TID = 25002; // "DBA_OBJECTS_ORA" const uint64_t OB_ALL_OBJECTS_TID = 25003; // "ALL_OBJECTS" @@ -1657,6 +1660,7 @@ const uint64_t OB_GV_OB_ARBITRATION_SERVICE_STATUS_ORA_TID = 28191; // "GV$OB_AR const uint64_t OB_V_OB_ARBITRATION_SERVICE_STATUS_ORA_TID = 28192; // "V$OB_ARBITRATION_SERVICE_STATUS_ORA" const uint64_t OB_V_OB_TIMESTAMP_SERVICE_ORA_TID = 28193; // "V$OB_TIMESTAMP_SERVICE_ORA" const uint64_t OB_V_OB_LS_LOG_RESTORE_STATUS_ORA_TID = 28194; // "V$OB_LS_LOG_RESTORE_STATUS_ORA" +const uint64_t OB_GV_OB_FLT_TRACE_CONFIG_ORA_TID = 28195; // "GV$OB_FLT_TRACE_CONFIG_ORA" const uint64_t OB_ALL_TABLE_AUX_LOB_META_TID = 50003; // "__all_table_aux_lob_meta" const uint64_t OB_ALL_COLUMN_AUX_LOB_META_TID = 50004; // "__all_column_aux_lob_meta" const uint64_t OB_ALL_DDL_OPERATION_AUX_LOB_META_TID = 50005; // "__all_ddl_operation_aux_lob_meta" @@ -2979,6 +2983,7 @@ const char *const OB_ALL_VIRTUAL_WR_CONTROL_TNAME = "__all_virtual_wr_control"; const char *const OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_TNAME = "__all_virtual_tenant_event_history"; const char *const OB_ALL_VIRTUAL_BALANCE_TASK_HELPER_TNAME = "__all_virtual_balance_task_helper"; const char *const OB_ALL_VIRTUAL_BALANCE_GROUP_LS_STAT_TNAME = "__all_virtual_balance_group_ls_stat"; +const char *const OB_ALL_VIRTUAL_FLT_CONFIG_TNAME = "__all_virtual_flt_config"; const char *const OB_ALL_VIRTUAL_SQL_AUDIT_ORA_TNAME = "ALL_VIRTUAL_SQL_AUDIT"; const char *const OB_ALL_VIRTUAL_PLAN_STAT_ORA_TNAME = "ALL_VIRTUAL_PLAN_STAT"; const char *const OB_ALL_VIRTUAL_PLAN_CACHE_PLAN_EXPLAIN_ORA_TNAME = "ALL_VIRTUAL_PLAN_CACHE_PLAN_EXPLAIN"; @@ -3216,6 +3221,7 @@ const char *const OB_ALL_VIRTUAL_TENANT_PARAMETER_ORA_TNAME = "ALL_VIRTUAL_TENAN const char *const OB_ALL_VIRTUAL_WR_CONTROL_ORA_TNAME = "ALL_VIRTUAL_WR_CONTROL"; const char *const OB_ALL_VIRTUAL_TENANT_EVENT_HISTORY_ORA_TNAME = "ALL_VIRTUAL_TENANT_EVENT_HISTORY"; const char *const OB_ALL_VIRTUAL_LS_REAL_AGENT_ORA_TNAME = "ALL_VIRTUAL_LS_REAL_AGENT"; +const char *const OB_ALL_VIRTUAL_FLT_CONFIG_ORA_TNAME = "ALL_VIRTUAL_FLT_CONFIG"; const char *const OB_GV_OB_PLAN_CACHE_STAT_TNAME = "GV$OB_PLAN_CACHE_STAT"; const char *const OB_GV_OB_PLAN_CACHE_PLAN_STAT_TNAME = "GV$OB_PLAN_CACHE_PLAN_STAT"; const char *const OB_SCHEMATA_TNAME = "SCHEMATA"; @@ -3560,6 +3566,7 @@ const char *const OB_DBA_OB_LS_HISTORY_TNAME = "DBA_OB_LS_HISTORY"; const char *const OB_CDB_OB_LS_HISTORY_TNAME = "CDB_OB_LS_HISTORY"; const char *const OB_DBA_OB_TENANT_EVENT_HISTORY_TNAME = "DBA_OB_TENANT_EVENT_HISTORY"; const char *const OB_CDB_OB_TENANT_EVENT_HISTORY_TNAME = "CDB_OB_TENANT_EVENT_HISTORY"; +const char *const OB_GV_OB_FLT_TRACE_CONFIG_TNAME = "GV$OB_FLT_TRACE_CONFIG"; const char *const OB_DBA_SYNONYMS_TNAME = "DBA_SYNONYMS"; const char *const OB_DBA_OBJECTS_ORA_TNAME = "DBA_OBJECTS"; const char *const OB_ALL_OBJECTS_TNAME = "ALL_OBJECTS"; @@ -3971,6 +3978,7 @@ const char *const OB_GV_OB_ARBITRATION_SERVICE_STATUS_ORA_TNAME = "GV$OB_ARBITRA const char *const OB_V_OB_ARBITRATION_SERVICE_STATUS_ORA_TNAME = "V$OB_ARBITRATION_SERVICE_STATUS"; const char *const OB_V_OB_TIMESTAMP_SERVICE_ORA_TNAME = "V$OB_TIMESTAMP_SERVICE"; const char *const OB_V_OB_LS_LOG_RESTORE_STATUS_ORA_TNAME = "V$OB_LS_LOG_RESTORE_STATUS"; +const char *const OB_GV_OB_FLT_TRACE_CONFIG_ORA_TNAME = "GV$OB_FLT_TRACE_CONFIG"; const char *const OB_ALL_TABLE_AUX_LOB_META_TNAME = "__all_table_aux_lob_meta"; const char *const OB_ALL_COLUMN_AUX_LOB_META_TNAME = "__all_column_aux_lob_meta"; const char *const OB_ALL_DDL_OPERATION_AUX_LOB_META_TNAME = "__all_ddl_operation_aux_lob_meta"; diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index c8d28ef72a..20b034fc79 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -6104,7 +6104,10 @@ def_table_schema( ('sql_trace', 'bool'), ('plan_id', 'int'), ('tenant_id', 'int'), - ('effective_tenant_id', 'int') + ('effective_tenant_id', 'int'), + ('level', 'int'), + ('sample_percentage', 'int'), + ('record_policy', 'varchar:32') ], partition_columns = ['svr_ip', 'svr_port'], vtable_route_policy = 'distributed', @@ -7146,7 +7149,8 @@ def_table_schema( ('tx_internal_route_flag', 'uint'), ('partition_hit', 'bool'), - ('tx_internal_route_version', 'uint') + ('tx_internal_route_version', 'uint'), + ('flt_trace_id', 'varchar:OB_MAX_SPAN_LENGTH') ], partition_columns = ['svr_ip', 'svr_port'], vtable_route_policy = 'distributed', @@ -12464,6 +12468,26 @@ def_table_schema(**gen_iterate_private_virtual_table_def( # 12420: __all_virtual_flt_config +def_table_schema( + owner = 'guoyun.lgy', + table_name = '__all_virtual_flt_config', + table_id = '12420', + table_type = 'VIRTUAL_TABLE', + gm_columns = [], + in_tenant_space = True, + rowkey_columns = [ + ], + normal_columns = [ + ('tenant_id', 'int'), + ('type', 'varchar:16'), + ('module_name', 'varchar:MAX_VALUE_LENGTH'), + ('action_name', 'varchar:MAX_VALUE_LENGTH'), + ('client_identifier', 'varchar:OB_MAX_CONTEXT_CLIENT_IDENTIFIER_LENGTH'), + ('level', 'int'), + ('sample_percentage', 'int'), + ('record_policy', 'varchar:32') + ] +) # 12421: __all_virtual_tenant_scheduler_job_class # 12422: __all_virtual_recover_table_job @@ -12858,6 +12882,7 @@ def_table_schema(**gen_oracle_mapping_virtual_table_def('15399', all_def_keyword def_table_schema(**gen_oracle_mapping_real_virtual_table_def('15402', all_def_keywords['__all_ls'])) # 15403: __all_virtual_flt_config +def_table_schema(**no_direct_access(gen_oracle_mapping_virtual_table_def('15403', all_def_keywords['__all_virtual_flt_config']))) # 15404: __all_virtual_tenant_scheduler_job_run_detail @@ -14082,7 +14107,8 @@ def_table_schema( partition_hit as PARTITION_HIT, case when tx_internal_route_flag & 96 = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, - tx_internal_route_version as TX_STATE_VERSION + tx_internal_route_version as TX_STATE_VERSION, + flt_trace_id as FLT_TRACE_ID from oceanbase.__all_virtual_sql_audit """.replace("\n", " "), @@ -21097,7 +21123,10 @@ SELECT TRANS_STATE, ACTION, MODULE, - CLIENT_INFO + CLIENT_INFO, + LEVEL, + SAMPLE_PERCENTAGE, + RECORD_POLICY FROM oceanbase.__all_virtual_processlist """.replace("\n", " ") ) @@ -28557,6 +28586,31 @@ def_table_schema( """.replace("\n", " ") ) # 21449: GV$OB_FLT_TRACE_CONFIG +def_table_schema( + owner = 'guoyun.lgy', + table_name = 'GV$OB_FLT_TRACE_CONFIG', + table_id = '21449', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = + """ + SELECT + a.TENANT_ID, + TYPE, + TENANT_NAME, + MODULE_NAME, + ACTION_NAME, + CLIENT_IDENTIFIER, + LEVEL, + SAMPLE_PERCENTAGE, + RECORD_POLICY + FROM OCEANBASE.__all_virtual_flt_config a, OCEANBASE.DBA_OB_TENANTS b + WHERE a.tenant_id = b.tenant_id + """.replace("\n", " ") +) # 21459:GV$OB_SESSION # 21460:V$OB_SESSION @@ -28580,7 +28634,6 @@ def_table_schema( # 21477: GV$OB_DUMP_TENANT_INFO # 21478: V$OB_DUMP_TENANT_INFO - # # 余留位置 @@ -46813,7 +46866,8 @@ def_table_schema( rule_name as RULE_NAME, case when bitand(tx_internal_route_flag, 96) = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, - tx_internal_route_version as TX_STATE_VERSION + tx_internal_route_version as TX_STATE_VERSION, + flt_trace_id as FLT_TRACE_ID FROM SYS.ALL_VIRTUAL_SQL_AUDIT """.replace("\n", " ") ) @@ -50769,7 +50823,10 @@ SELECT TRANS_STATE, ACTION, MODULE, - CLIENT_INFO + CLIENT_INFO, + "LEVEL", + SAMPLE_PERCENTAGE, + RECORD_POLICY FROM SYS.ALL_VIRTUAL_PROCESSLIST """.replace("\n", " ") ) @@ -52737,6 +52794,33 @@ def_table_schema( """.replace("\n", " ") ) # 28195: GV$OB_FLT_TRACE_CONFIG +def_table_schema( + owner = 'guoyun.lgy', + table_name = 'GV$OB_FLT_TRACE_CONFIG', + name_postfix = '_ORA', + database_id = 'OB_ORA_SYS_DATABASE_ID', + table_id = '28195', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = + """ + SELECT + a.TENANT_ID, + TYPE, + TENANT_NAME, + MODULE_NAME, + ACTION_NAME, + CLIENT_IDENTIFIER, + "LEVEL", + SAMPLE_PERCENTAGE, + RECORD_POLICY + FROM SYS.ALL_VIRTUAL_FLT_CONFIG a, SYS.DBA_OB_TENANTS b + WHERE a.TENANT_ID = b.TENANT_ID; + """.replace("\n", " ") +) # 28196: GV$OB_SESSION # 28197: V$OB_SESSION # 28198: GV$OB_PL_CACHE_OBJECT diff --git a/src/sql/monitor/flt/ob_flt_control_info_mgr.cpp b/src/sql/monitor/flt/ob_flt_control_info_mgr.cpp index 327d9750be..591aa0b762 100644 --- a/src/sql/monitor/flt/ob_flt_control_info_mgr.cpp +++ b/src/sql/monitor/flt/ob_flt_control_info_mgr.cpp @@ -1058,5 +1058,44 @@ int ObFLTControlInfoManager::find_appropriate_con_info(sql::ObSQLSessionInfo &se return ret; } +int ObFLTControlInfoManager::get_all_flt_config(common::ObIArray &rec_list, ObIAllocator &alloc) { + int ret = OB_SUCCESS; + // teannt_level + ObFLTConfRec rec; + rec.tenant_id_ = tenant_id_; + rec.type_ = FLT_TENANT_TYPE; + rec.control_info_ = tenant_info_; + if (OB_FAIL(rec_list.push_back(rec))) { + LOG_WARN("failed to push back flt config rec", K(ret)); + } + + for (int64_t i = 0; OB_SUCC(ret) && i < mod_infos_.count(); i++) { + ObFLTConfRec rec; + rec.tenant_id_ = tenant_id_; + rec.type_ = FLT_MOD_ACT_TYPE; + rec.control_info_ = mod_infos_.at(i).control_info_; + if (OB_FAIL(ob_write_string(alloc, mod_infos_.at(i).mod_name_, rec.mod_name_))) { + LOG_WARN("failed to write string", K(mod_infos_.at(i).mod_name_), K(ret)); + } else if (OB_FAIL(ob_write_string(alloc, mod_infos_.at(i).act_name_, rec.act_name_))) { + LOG_WARN("failed to write string", K(mod_infos_.at(i).act_name_), K(ret)); + } else if (OB_FAIL(rec_list.push_back(rec))) { + LOG_WARN("failed to push back flt config rec", K(ret)); + } + } + + for (int64_t i = 0; OB_SUCC(ret) && i < identifier_infos_.count(); i++) { + ObFLTConfRec rec; + rec.tenant_id_ = tenant_id_; + rec.type_ = FLT_CLIENT_ID_TYPE; + rec.control_info_ = identifier_infos_.at(i).control_info_; + if (OB_FAIL(ob_write_string(alloc, identifier_infos_.at(i).identifier_name_, rec.identifier_name_))) { + LOG_WARN("failed to write string", K(mod_infos_.at(i).mod_name_), K(ret)); + } else if (OB_FAIL(rec_list.push_back(rec))) { + LOG_WARN("failed to push back flt config rec", K(ret)); + } + } + return ret; +} + } // namespace sql } // namespace oceanbase diff --git a/src/sql/monitor/flt/ob_flt_control_info_mgr.h b/src/sql/monitor/flt/ob_flt_control_info_mgr.h index 04e9f1bcd1..00fea19924 100644 --- a/src/sql/monitor/flt/ob_flt_control_info_mgr.h +++ b/src/sql/monitor/flt/ob_flt_control_info_mgr.h @@ -65,7 +65,34 @@ namespace sql FLTControlInfo control_info_; TO_STRING_KV(K_(mod_name), K_(act_name), K_(control_info)); }; + + enum ObFLTConfigType { + FLT_INVALID_TYPE = 0, + FLT_TENANT_TYPE = 1, + FLT_MOD_ACT_TYPE = 2, + FLT_CLIENT_ID_TYPE = 3 + }; + class ObFLTConfRec { + public: + ObFLTConfRec(): + tenant_id_(OB_INVALID_ID), + type_(FLT_INVALID_TYPE), + mod_name_(), + act_name_(), + control_info_() {} + public: + uint64_t tenant_id_; + ObFLTConfigType type_; + ObString mod_name_; + ObString act_name_; + ObString identifier_name_; + FLTControlInfo control_info_; + + TO_STRING_KV(K_(tenant_id), K_(type), K_(mod_name), K_(act_name), K_(identifier_name), K_(control_info)); + }; + + class ObFLTControlInfoManager { public: ObFLTControlInfoManager(uint64_t t_id) : @@ -96,6 +123,7 @@ namespace sql int get_mod_act_con_info(common::ObString mod, common::ObString act, FLTControlInfo &coninfo); int get_client_id_con_info(common::ObString client_id, FLTControlInfo &coninfo); int find_appropriate_con_info(sql::ObSQLSessionInfo &sess); + int get_all_flt_config(common::ObIArray &rec_list, ObIAllocator &allocator); bool is_valid_tenant_config() { return tenant_info_.is_valid(); diff --git a/src/sql/monitor/ob_exec_stat.h b/src/sql/monitor/ob_exec_stat.h index c4d890db7e..5f3020f61e 100644 --- a/src/sql/monitor/ob_exec_stat.h +++ b/src/sql/monitor/ob_exec_stat.h @@ -403,6 +403,7 @@ struct ObAuditRecordData { uint64_t txn_free_route_version_; // the version of txn's state bool partition_hit_;// flag for need das partition route or not bool is_perf_event_closed_; + char flt_trace_id_[OB_MAX_UUID_STR_LENGTH + 1]; }; } //namespace sql diff --git a/src/sql/session/ob_sql_session_info.cpp b/src/sql/session/ob_sql_session_info.cpp index 25ea006361..9b28728885 100644 --- a/src/sql/session/ob_sql_session_info.cpp +++ b/src/sql/session/ob_sql_session_info.cpp @@ -351,6 +351,7 @@ void ObSQLSessionInfo::reset(bool skip_sys_var) sql_req_level_ = 0; optimizer_tracer_.reset(); expect_group_id_ = OB_INVALID_ID; + flt_control_info_.reset(); group_id_not_expected_ = false; //call at last time dblink_context_.reset(); // need reset before ObBasicSessionInfo::reset(skip_sys_var); @@ -1794,6 +1795,14 @@ const ObAuditRecordData &ObSQLSessionInfo::get_final_audit_record( audit_record_.txn_free_route_flag_ = txn_free_route_ctx_.get_audit_record(); audit_record_.txn_free_route_version_ = txn_free_route_ctx_.get_global_version(); + trace::UUID trc_uuid = OBTRACE->get_trace_id(); + int64_t pos = 0; + if (trc_uuid.is_inited()) { + trc_uuid.tostring(audit_record_.flt_trace_id_, OB_MAX_UUID_STR_LENGTH + 1, pos); + } else { + // do nothing + } + audit_record_.flt_trace_id_[pos] = '\0'; return audit_record_; } diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result index 8d27d4d8c3..f5031bf58e 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result @@ -637,6 +637,7 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 12415 __all_virtual_tenant_event_history 2 201001 1 12416 __all_virtual_balance_task_helper 2 201001 1 12417 __all_virtual_balance_group_ls_stat 2 201001 1 +12420 __all_virtual_flt_config 2 201001 1 20001 GV$OB_PLAN_CACHE_STAT 1 201001 1 20002 GV$OB_PLAN_CACHE_PLAN_STAT 1 201001 1 20003 SCHEMATA 1 201002 1 @@ -981,6 +982,7 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 21446 CDB_OB_LS_HISTORY 1 201001 1 21447 DBA_OB_TENANT_EVENT_HISTORY 1 201001 1 21448 CDB_OB_TENANT_EVENT_HISTORY 1 201001 1 +21449 GV$OB_FLT_TRACE_CONFIG 1 201001 1 check sys table count and table_id range success check count and table_id range for virtual table success select * from information_schema.CHARACTER_SETS limit 1;