diff --git a/src/observer/virtual_table/ob_gv_sql.cpp b/src/observer/virtual_table/ob_gv_sql.cpp index a969899c8..de69d649a 100644 --- a/src/observer/virtual_table/ob_gv_sql.cpp +++ b/src/observer/virtual_table/ob_gv_sql.cpp @@ -33,6 +33,7 @@ using namespace oceanbase; using namespace sql; using namespace observer; using namespace common; +using namespace pl; ObGVSql::ObGVSql() :plan_id_array_(), @@ -207,16 +208,18 @@ int ObGVSql::fill_cells(const ObILibCacheObject *cache_obj, const ObPlanCache &p case share::ALL_VIRTUAL_PLAN_STAT_CDE::SQL_ID: { if (cache_stat_updated) { ObString sql_id; - if (OB_NOT_NULL(pl_object)) { - if (OB_FAIL(ob_write_string(*allocator_, - pl_object->get_stat().sql_id_, - sql_id))) { - SERVER_LOG(ERROR, "copy sql_id failed", K(ret)); - } else { - cells[i].set_varchar(sql_id); - cells[i].set_collation_type(ObCharset::get_default_collation( - ObCharset::get_default_charset())); - } + if (OB_NOT_NULL(pl_object) + && (pl_object->get_ns() == ObLibCacheNameSpace::NS_CALLSTMT + || pl_object->get_ns() == ObLibCacheNameSpace::NS_ANON)) { + if (OB_FAIL(ob_write_string(*allocator_, + pl_object->get_stat().sql_id_, + sql_id))) { + SERVER_LOG(ERROR, "copy sql_id failed", K(ret)); + } else { + cells[i].set_varchar(sql_id); + cells[i].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); + } } else if (!cache_obj->is_sql_crsr()) { cells[i].set_null(); } else if (OB_FAIL(ob_write_string(*allocator_, @@ -399,10 +402,12 @@ int ObGVSql::fill_cells(const ObILibCacheObject *cache_obj, const ObPlanCache &p case share::ALL_VIRTUAL_PLAN_STAT_CDE::PARAM_INFOS: { if (!cache_stat_updated) { cells[i].set_null(); - } else if (cache_obj->is_sql_crsr()) { + } else if (cache_obj->is_sql_crsr() || + NULL != pl_object) { ObString param_info_lob_str; + const ObString& param_infos = NULL != pl_object ? pl_object->get_stat().param_infos_ : plan->stat_.param_infos_; if (OB_FAIL(ob_write_string(*allocator_, - plan->stat_.param_infos_, + param_infos, param_info_lob_str))) { SERVER_LOG(ERROR, "copy param_infos failed", K(ret)); } else { @@ -538,8 +543,12 @@ int ObGVSql::fill_cells(const ObILibCacheObject *cache_obj, const ObPlanCache &p cells[i].set_int(0); } } else if (NULL != pl_object) { - if (pl_object->get_stat().execute_times_ != 0) { - cells[i].set_int(pl_object->get_stat().elapsed_time_ / pl_object->get_stat().execute_times_); + int64_t execute_times = 0; + int64_t elapsed_time = 0; + if (OB_FAIL(ObPLCacheObject::get_times(pl_object, execute_times, elapsed_time))) { + SERVER_LOG(WARN, "failed to get real AVG_EXE_USEC for package", K(ret), K(*pl_object)); + } else if (execute_times != 0) { + cells[i].set_int(elapsed_time / execute_times); } else { cells[i].set_int(0); } @@ -607,7 +616,13 @@ int ObGVSql::fill_cells(const ObILibCacheObject *cache_obj, const ObPlanCache &p break; } case share::ALL_VIRTUAL_PLAN_STAT_CDE::PL_CG_MEM_HOLD: { - cells[i].set_int(0); + if (!cache_stat_updated) { + cells[i].set_null(); + } else if (NULL != pl_object) { + cells[i].set_int(pl_object->get_stat().pl_cg_mem_hold_); + } else { + cells[i].set_int(0); + } break; } case share::ALL_VIRTUAL_PLAN_STAT_CDE::EXECUTIONS: { @@ -616,7 +631,13 @@ int ObGVSql::fill_cells(const ObILibCacheObject *cache_obj, const ObPlanCache &p } else if (cache_obj->is_sql_crsr()) { cells[i].set_int(plan->stat_.execute_times_); } else if (NULL != pl_object) { - cells[i].set_int(pl_object->get_stat().execute_times_); + int64_t execute_times = 0; + int64_t elapsed_time = 0; + if (OB_FAIL(ObPLCacheObject::get_times(pl_object, execute_times, elapsed_time))) { + SERVER_LOG(WARN, "failed to get real AVG_EXE_USEC for package", K(ret), K(*pl_object)); + } else { + cells[i].set_int(execute_times); + } } else { cells[i].set_int(0); } @@ -698,7 +719,13 @@ int ObGVSql::fill_cells(const ObILibCacheObject *cache_obj, const ObPlanCache &p } else if (cache_obj->is_sql_crsr()) { cells[i].set_uint64(static_cast(plan->stat_.elapsed_time_)); } else if (NULL != pl_object) { - cells[i].set_uint64(static_cast(pl_object->get_stat().elapsed_time_)); + int64_t execute_times = 0; + int64_t elapsed_time = 0; + if (OB_FAIL(ObPLCacheObject::get_times(pl_object, execute_times, elapsed_time))) { + SERVER_LOG(WARN, "failed to get real AVG_EXE_USEC for package", K(ret), K(*pl_object)); + } else { + cells[i].set_uint64(static_cast(elapsed_time)); + } } else { cells[i].set_uint64(0); } diff --git a/src/pl/ob_pl_compile.cpp b/src/pl/ob_pl_compile.cpp index 0d619a626..26eacc092 100644 --- a/src/pl/ob_pl_compile.cpp +++ b/src/pl/ob_pl_compile.cpp @@ -252,6 +252,9 @@ int ObPLCompiler::compile( func.get_di_helper(), lib::is_oracle_mode()) { #endif + int64_t cg_jit_mem = 0; + ObPLCGMallocCallback pmcb(cg_jit_mem); + lib::ObMallocCallbackGuard memory_guard(pmcb); lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), GET_PL_MOD_STRING(OB_PL_CODE_GEN))); uint64_t lock_idx = stmt_id != OB_INVALID_ID ? stmt_id : block_hash; @@ -298,6 +301,7 @@ int ObPLCompiler::compile( || OB_FAIL(schema_guard_.get_schema_version(OB_SYS_TENANT_ID, sys_schema_version))) { LOG_WARN("fail to get schema version", K(ret), K(tenant_id)); } else { + func.get_stat_for_update().pl_cg_mem_hold_ = cg_jit_mem; func.set_tenant_schema_version(tenant_schema_version); func.set_sys_schema_version(sys_schema_version); } @@ -496,6 +500,9 @@ int ObPLCompiler::compile( func.get_di_helper(), lib::is_oracle_mode()) { #endif + int64_t cg_jit_mem = 0; + ObPLCGMallocCallback pmcb(cg_jit_mem); + lib::ObMallocCallbackGuard memory_guard(pmcb); lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), GET_PL_MOD_STRING(OB_PL_CODE_GEN))); ObRoutinePersistentInfo::ObPLOperation op = ObRoutinePersistentInfo::ObPLOperation::NONE; ObRoutinePersistentInfo routine_storage( @@ -532,6 +539,7 @@ int ObPLCompiler::compile( OZ (func.set_tenant_sys_schema_version(schema_guard_, session_info_.get_effective_tenant_id())); OX (func.set_ret_type(func_ast.get_ret_type())); OX (func.get_stat_for_update().schema_version_ = routine.get_schema_version()); + OX (func.get_stat_for_update().pl_cg_mem_hold_ = cg_jit_mem); } OZ (check_dep_schema(schema_guard_, func.get_dependency_table())); } // end heap var @@ -897,6 +905,9 @@ int ObPLCompiler::compile_package(const ObPackageInfo &package_info, package.get_di_helper(), lib::is_oracle_mode()) { #endif + int64_t cg_jit_mem = 0; + ObPLCGMallocCallback pmcb(cg_jit_mem); + lib::ObMallocCallbackGuard memory_guard(pmcb); lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), GET_PL_MOD_STRING(pl::OB_PL_CODE_GEN))); // latch_id = (bucket_id % bucket_cnt_) / 8, so it is needed to multiply 8 to avoid consecutive ids being mapped to the same latch @@ -908,6 +919,7 @@ int ObPLCompiler::compile_package(const ObPackageInfo &package_info, OZ (cg.init()); OZ (cg.generate(package)); + OX (package.get_stat_for_update().pl_cg_mem_hold_ = cg_jit_mem); } } diff --git a/src/pl/ob_pl_compile.h b/src/pl/ob_pl_compile.h index bfc64ff0a..7c96a9ba6 100644 --- a/src/pl/ob_pl_compile.h +++ b/src/pl/ob_pl_compile.h @@ -17,6 +17,7 @@ #include "ob_pl_stmt.h" #include "ob_pl_persistent.h" #include "lib/hash/ob_hashmap.h" +#include "lib/alloc/ob_malloc_callback.h" namespace oceanbase { @@ -36,6 +37,25 @@ class ObPLPackageGuard; class ObPLResolver; class ObPLVarDebugInfo; class ObRoutinePersistentInfo; + +class ObPLCGMallocCallback final : public lib::ObMallocCallback +{ +public: + ObPLCGMallocCallback(int64_t &mem_used) + : mem_used_(mem_used) {} + virtual ~ObPLCGMallocCallback() {} + virtual void operator()(const ObMemAttr &attr, int64_t add_size) override + { + if ((ObLabel(GET_PL_MOD_STRING(pl::OB_PL_JIT)) == attr.label_ + || ObLabel(GET_PL_MOD_STRING(pl::OB_PL_CODE_GEN)) == attr.label_) + && attr.ctx_id_ == ObCtxIds::GLIBC) { + mem_used_ += add_size; + } + } +private: + int64_t &mem_used_; +}; // end of class ObPLCGMallocCallback + class ObPLCompiler { public: diff --git a/src/pl/pl_cache/ob_pl_cache_object.cpp b/src/pl/pl_cache/ob_pl_cache_object.cpp index 28ffd1376..5f72591e9 100644 --- a/src/pl/pl_cache/ob_pl_cache_object.cpp +++ b/src/pl/pl_cache/ob_pl_cache_object.cpp @@ -15,6 +15,7 @@ #include "lib/oblog/ob_log_module.h" #include "pl/pl_cache/ob_pl_cache.h" #include "src/share/ob_truncated_string.h" +#include "pl/ob_pl_package.h" namespace oceanbase { @@ -128,6 +129,53 @@ int ObPLCacheObject::set_params_info(const ParamStore ¶ms, bool is_anonymous return ret; } +int ObPLCacheObject::init_params_info_str() +{ + int ret = OB_SUCCESS; + int64_t N = params_info_.count(); + int64_t buf_len = N * ObPlParamInfo::MAX_STR_DES_LEN_PL + 1; + int64_t pos = 0; + char *buf = (char *)allocator_.alloc(buf_len); + if (OB_ISNULL(buf)) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_WARN("fail to alloc memory for param info", K(ret)); + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < N; i++) { + if (N - 1 != i) { + if (OB_FAIL(databuff_printf(buf, buf_len, pos, "{%d,%d,%d,%d,%d,%d,%ju},", + params_info_.at(i).flag_.need_to_check_type_, + params_info_.at(i).flag_.need_to_check_bool_value_, + params_info_.at(i).flag_.expected_bool_value_, + params_info_.at(i).scale_, + params_info_.at(i).type_, + params_info_.at(i).pl_type_, + params_info_.at(i).udt_id_ + ))) { + LOG_WARN("fail to buff_print param info", K(ret)); + } + } else { + if (OB_FAIL(databuff_printf(buf, buf_len, pos, "{%d,%d,%d,%d,%d,%d,%ju}", + params_info_.at(i).flag_.need_to_check_type_, + params_info_.at(i).flag_.need_to_check_bool_value_, + params_info_.at(i).flag_.expected_bool_value_, + params_info_.at(i).scale_, + params_info_.at(i).type_, + params_info_.at(i).pl_type_, + params_info_.at(i).udt_id_ + ))) { + LOG_WARN("fail to buff_print param info", K(ret)); + } + } + } + } + if (OB_SUCC(ret)) { + if (OB_FAIL(ob_write_string(allocator_, ObString(pos, buf), stat_.param_infos_))) { + LOG_WARN("fail to deep copy param infos", K(ret)); + } + } + return ret; +} + int ObPLCacheObject::update_cache_obj_stat(sql::ObILibCacheCtx &ctx) { int ret = OB_SUCCESS; @@ -166,6 +214,10 @@ int ObPLCacheObject::update_cache_obj_stat(sql::ObILibCacheCtx &ctx) } } } + if (OB_SUCC(ret) && OB_FAIL(init_params_info_str())) { + // init param info str + LOG_WARN("fail to init param info str", K(ret)); + } if (OB_SUCC(ret)) { if (ObLibCacheNameSpace::NS_ANON == get_ns() && OB_INVALID_ID != pc_ctx.key_.key_id_) { stat.ps_stmt_id_ = pc_ctx.key_.key_id_; @@ -192,5 +244,29 @@ int ObPLCacheObject::update_execute_time(int64_t exec_time) return ret; } +int ObPLCacheObject::get_times(const ObPLCacheObject *pl_object, int64_t& execute_times, int64_t& elapsed_time) +{ + int ret = OB_SUCCESS; + CK (OB_NOT_NULL(pl_object)); + if (OB_FAIL(ret)) { + } else if (FALSE_IT(execute_times = pl_object->get_stat().execute_times_)) { + } else if (FALSE_IT(elapsed_time = pl_object->get_stat().elapsed_time_)) { + } else if (ObLibCacheNameSpace::NS_PKG == pl_object->get_ns()) { + const ObPLPackage *package = static_cast(pl_object); + if (NULL == package) { + LOG_WARN("failed to static cast ObPLPackage", K(ret), K(*pl_object)); + ret = OB_ERR_UNEXPECTED; + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < package->get_routine_table().count(); ++i) { + if (OB_NOT_NULL(package->get_routine_table().at(i))) { + execute_times += package->get_routine_table().at(i)->get_stat().execute_times_; + elapsed_time += package->get_routine_table().at(i)->get_stat().elapsed_time_; + } + } + } + } + return ret; +} + } } \ No newline at end of file diff --git a/src/pl/pl_cache/ob_pl_cache_object.h b/src/pl/pl_cache/ob_pl_cache_object.h index 3ea5db943..66d454f85 100644 --- a/src/pl/pl_cache/ob_pl_cache_object.h +++ b/src/pl/pl_cache/ob_pl_cache_object.h @@ -55,6 +55,7 @@ struct ObPlParamInfo : public sql::ObParamInfo uint8_t pl_type_; uint64_t udt_id_; + static const int64_t MAX_STR_DES_LEN_PL = 96; OB_UNIS_VERSION_V(1); }; @@ -90,7 +91,9 @@ struct PLCacheObjStat int64_t pl_evict_version_; int64_t schema_version_; int64_t ps_stmt_id_;//prepare stmt id + int64_t pl_cg_mem_hold_; common::ObString sys_vars_str_; + common::ObString param_infos_; PLCacheObjStat() : pl_schema_id_(OB_INVALID_ID), @@ -110,7 +113,9 @@ struct PLCacheObjStat pl_evict_version_(OB_INVALID_ID), schema_version_(OB_INVALID_ID), ps_stmt_id_(OB_INVALID_ID), - sys_vars_str_() + pl_cg_mem_hold_(0), + sys_vars_str_(), + param_infos_() { sql_id_[0] = '\0'; } @@ -139,7 +144,9 @@ struct PLCacheObjStat pl_evict_version_ = OB_INVALID_ID; schema_version_ = OB_INVALID_ID; ps_stmt_id_ = OB_INVALID_ID; + pl_cg_mem_hold_ = 0; sys_vars_str_.reset(); + param_infos_.reset(); } TO_STRING_KV(K_(pl_schema_id), @@ -153,7 +160,9 @@ struct PLCacheObjStat K_(type), K_(pl_evict_version), K_(schema_version), - K_(sys_vars_str)); + K_(pl_cg_mem_hold), + K_(sys_vars_str), + K_(param_infos)); }; class ObPLCacheObject : public sql::ObILibCacheObject @@ -206,7 +215,9 @@ public: inline PLCacheObjStat &get_stat_for_update() { return stat_; } virtual int update_cache_obj_stat(sql::ObILibCacheCtx &ctx); + int init_params_info_str(); int update_execute_time(int64_t exec_time); + static int get_times(const ObPLCacheObject *pl_object, int64_t& execute_times, int64_t& elapsed_time); TO_STRING_KV(K_(expr_op_size), K_(tenant_schema_version), diff --git a/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp b/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp index d58cca5fc..4c5477921 100644 --- a/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp @@ -162,7 +162,7 @@ int ObInnerTableSchema::gv_ob_pl_cache_object_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 TENANT_ID, SVR_IP, SVR_PORT, PLAN_ID AS CACHE_OBJECT_ID, STATEMENT AS PARAMETERIZE_TEXT, QUERY_SQL AS OBJECT_TEXT, FIRST_LOAD_TIME, LAST_ACTIVE_TIME, AVG_EXE_USEC, SLOWEST_EXE_TIME, SLOWEST_EXE_USEC, HIT_COUNT, PLAN_SIZE AS CACHE_OBJ_SIZE, EXECUTIONS, ELAPSED_TIME, OBJECT_TYPE, PL_SCHEMA_ID AS OBJECT_ID, COMPILE_TIME, SCHEMA_VERSION, PL_EVICT_VERSION, PS_STMT_ID, DB_ID, PL_CG_MEM_HOLD FROM oceanbase.__all_virtual_plan_stat WHERE OBJECT_STATUS = 0 AND TYPE > 5 AND TYPE < 11 AND is_in_pc=true )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, SVR_IP, SVR_PORT, PLAN_ID AS CACHE_OBJECT_ID, STATEMENT AS PARAMETERIZE_TEXT, QUERY_SQL AS OBJECT_TEXT, FIRST_LOAD_TIME, LAST_ACTIVE_TIME, AVG_EXE_USEC, SLOWEST_EXE_TIME, SLOWEST_EXE_USEC, HIT_COUNT, PLAN_SIZE AS CACHE_OBJ_SIZE, EXECUTIONS, ELAPSED_TIME, OBJECT_TYPE, PL_SCHEMA_ID AS OBJECT_ID, COMPILE_TIME, SCHEMA_VERSION, PL_EVICT_VERSION, PS_STMT_ID, DB_ID, PL_CG_MEM_HOLD, SYS_VARS, PARAM_INFOS FROM oceanbase.__all_virtual_plan_stat WHERE OBJECT_STATUS = 0 AND TYPE > 5 AND TYPE < 11 AND is_in_pc=true )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -213,7 +213,7 @@ int ObInnerTableSchema::v_ob_pl_cache_object_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 TENANT_ID, SVR_IP, SVR_PORT, CACHE_OBJECT_ID, PARAMETERIZE_TEXT, OBJECT_TEXT, FIRST_LOAD_TIME, LAST_ACTIVE_TIME, AVG_EXE_USEC, SLOWEST_EXE_TIME, SLOWEST_EXE_USEC, HIT_COUNT, CACHE_OBJ_SIZE, EXECUTIONS, ELAPSED_TIME, OBJECT_TYPE, OBJECT_ID, COMPILE_TIME, SCHEMA_VERSION, PL_EVICT_VERSION, PS_STMT_ID, DB_ID, PL_CG_MEM_HOLD FROM oceanbase.GV$OB_PL_CACHE_OBJECT WHERE SVR_IP =HOST_IP() AND SVR_PORT = RPC_PORT() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, SVR_IP, SVR_PORT, CACHE_OBJECT_ID, PARAMETERIZE_TEXT, OBJECT_TEXT, FIRST_LOAD_TIME, LAST_ACTIVE_TIME, AVG_EXE_USEC, SLOWEST_EXE_TIME, SLOWEST_EXE_USEC, HIT_COUNT, CACHE_OBJ_SIZE, EXECUTIONS, ELAPSED_TIME, OBJECT_TYPE, OBJECT_ID, COMPILE_TIME, SCHEMA_VERSION, PL_EVICT_VERSION, PS_STMT_ID, DB_ID, PL_CG_MEM_HOLD, SYS_VARS, PARAM_INFOS FROM oceanbase.GV$OB_PL_CACHE_OBJECT WHERE SVR_IP =HOST_IP() AND SVR_PORT = RPC_PORT() )__"))) { 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 5781b891e..19a34171c 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 @@ -1692,7 +1692,7 @@ int ObInnerTableSchema::gv_ob_pl_cache_object_ora_schema(ObTableSchema &table_sc 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 TENANT_ID AS TENANT_ID, SVR_IP AS SVR_IP, SVR_PORT AS SVR_PORT, PLAN_ID AS CACHE_OBJECT_ID, STATEMENT AS PARAMETERIZE_TEXT, QUERY_SQL AS OBJECT_TEXT, FIRST_LOAD_TIME AS FIRST_LOAD_TIME, LAST_ACTIVE_TIME AS LAST_ACTIVE_TIME, AVG_EXE_USEC AS AVG_EXE_USEC, SLOWEST_EXE_TIME AS SLOWEST_EXE_TIME, SLOWEST_EXE_USEC AS SLOWEST_EXE_USEC, HIT_COUNT AS HIT_COUNT, PLAN_SIZE AS CACHE_OBJ_SIZE, EXECUTIONS AS EXECUTIONS, ELAPSED_TIME AS ELAPSED_TIME, OBJECT_TYPE AS OBJECT_TYPE, PL_SCHEMA_ID AS OBJECT_ID, COMPILE_TIME AS COMPILE_TIME, SCHEMA_VERSION AS SCHEMA_VERSION, PL_EVICT_VERSION AS PL_EVICT_VERSION, PS_STMT_ID AS PS_STMT_ID, DB_ID AS DB_ID, PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD FROM SYS.ALL_VIRTUAL_PLAN_STAT WHERE OBJECT_STATUS = 0 AND TYPE > 5 AND TYPE < 11 AND is_in_pc='1' )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID AS TENANT_ID, SVR_IP AS SVR_IP, SVR_PORT AS SVR_PORT, PLAN_ID AS CACHE_OBJECT_ID, STATEMENT AS PARAMETERIZE_TEXT, QUERY_SQL AS OBJECT_TEXT, FIRST_LOAD_TIME AS FIRST_LOAD_TIME, LAST_ACTIVE_TIME AS LAST_ACTIVE_TIME, AVG_EXE_USEC AS AVG_EXE_USEC, SLOWEST_EXE_TIME AS SLOWEST_EXE_TIME, SLOWEST_EXE_USEC AS SLOWEST_EXE_USEC, HIT_COUNT AS HIT_COUNT, PLAN_SIZE AS CACHE_OBJ_SIZE, EXECUTIONS AS EXECUTIONS, ELAPSED_TIME AS ELAPSED_TIME, OBJECT_TYPE AS OBJECT_TYPE, PL_SCHEMA_ID AS OBJECT_ID, COMPILE_TIME AS COMPILE_TIME, SCHEMA_VERSION AS SCHEMA_VERSION, PL_EVICT_VERSION AS PL_EVICT_VERSION, PS_STMT_ID AS PS_STMT_ID, DB_ID AS DB_ID, PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD, SYS_VARS AS SYS_VARS, PARAM_INFOS AS PARAM_INFOS FROM SYS.ALL_VIRTUAL_PLAN_STAT WHERE OBJECT_STATUS = 0 AND TYPE > 5 AND TYPE < 11 AND is_in_pc='1' )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1743,7 +1743,7 @@ int ObInnerTableSchema::v_ob_pl_cache_object_ora_schema(ObTableSchema &table_sch 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 TENANT_ID AS TENANT_ID, SVR_IP AS SVR_IP, SVR_PORT AS SVR_PORT, CACHE_OBJECT_ID AS CACHE_OBJECT_ID, PARAMETERIZE_TEXT AS PARAMETERIZE_TEXT, OBJECT_TEXT AS OBJECT_TEXT, FIRST_LOAD_TIME AS FIRST_LOAD_TIME, LAST_ACTIVE_TIME AS LAST_ACTIVE_TIME, AVG_EXE_USEC AS AVG_EXE_USEC, SLOWEST_EXE_TIME AS SLOWEST_EXE_TIME, SLOWEST_EXE_USEC AS SLOWEST_EXE_USEC, HIT_COUNT AS HIT_COUNT, CACHE_OBJ_SIZE AS CACHE_OBJ_SIZE, EXECUTIONS AS EXECUTIONS, ELAPSED_TIME AS ELAPSED_TIME, OBJECT_TYPE AS OBJECT_TYPE, OBJECT_ID AS OBJECT_ID, COMPILE_TIME AS COMPILE_TIME, SCHEMA_VERSION AS SCHEMA_VERSION, PL_EVICT_VERSION AS PL_EVICT_VERSION, PS_STMT_ID AS PS_STMT_ID, DB_ID AS DB_ID, PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD FROM SYS.GV$OB_PL_CACHE_OBJECT WHERE SVR_IP =HOST_IP() AND SVR_PORT = RPC_PORT() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID AS TENANT_ID, SVR_IP AS SVR_IP, SVR_PORT AS SVR_PORT, CACHE_OBJECT_ID AS CACHE_OBJECT_ID, PARAMETERIZE_TEXT AS PARAMETERIZE_TEXT, OBJECT_TEXT AS OBJECT_TEXT, FIRST_LOAD_TIME AS FIRST_LOAD_TIME, LAST_ACTIVE_TIME AS LAST_ACTIVE_TIME, AVG_EXE_USEC AS AVG_EXE_USEC, SLOWEST_EXE_TIME AS SLOWEST_EXE_TIME, SLOWEST_EXE_USEC AS SLOWEST_EXE_USEC, HIT_COUNT AS HIT_COUNT, CACHE_OBJ_SIZE AS CACHE_OBJ_SIZE, EXECUTIONS AS EXECUTIONS, ELAPSED_TIME AS ELAPSED_TIME, OBJECT_TYPE AS OBJECT_TYPE, OBJECT_ID AS OBJECT_ID, COMPILE_TIME AS COMPILE_TIME, SCHEMA_VERSION AS SCHEMA_VERSION, PL_EVICT_VERSION AS PL_EVICT_VERSION, PS_STMT_ID AS PS_STMT_ID, DB_ID AS DB_ID, PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD, SYS_VARS AS SYS_VARS, PARAM_INFOS AS PARAM_INFOS FROM SYS.GV$OB_PL_CACHE_OBJECT WHERE SVR_IP =HOST_IP() AND SVR_PORT = RPC_PORT() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } 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 71de4d117..ddb77b8e5 100755 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -34198,7 +34198,9 @@ def_table_schema( PL_EVICT_VERSION, PS_STMT_ID, DB_ID, - PL_CG_MEM_HOLD + PL_CG_MEM_HOLD, + SYS_VARS, + PARAM_INFOS FROM oceanbase.__all_virtual_plan_stat WHERE OBJECT_STATUS = 0 AND TYPE > 5 AND TYPE < 11 AND is_in_pc=true """.replace("\n", " "), normal_columns = [ @@ -34236,7 +34238,9 @@ def_table_schema( PL_EVICT_VERSION, PS_STMT_ID, DB_ID, - PL_CG_MEM_HOLD + PL_CG_MEM_HOLD, + SYS_VARS, + PARAM_INFOS FROM oceanbase.GV$OB_PL_CACHE_OBJECT WHERE SVR_IP =HOST_IP() AND SVR_PORT = RPC_PORT() """.replace("\n", " "), @@ -67936,7 +67940,9 @@ def_table_schema( PL_EVICT_VERSION AS PL_EVICT_VERSION, PS_STMT_ID AS PS_STMT_ID, DB_ID AS DB_ID, - PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD + PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD, + SYS_VARS AS SYS_VARS, + PARAM_INFOS AS PARAM_INFOS FROM SYS.ALL_VIRTUAL_PLAN_STAT WHERE OBJECT_STATUS = 0 AND TYPE > 5 AND TYPE < 11 AND is_in_pc='1' """.replace("\n", " "), normal_columns = [ @@ -67975,7 +67981,9 @@ def_table_schema( PL_EVICT_VERSION AS PL_EVICT_VERSION, PS_STMT_ID AS PS_STMT_ID, DB_ID AS DB_ID, - PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD + PL_CG_MEM_HOLD AS PL_CG_MEM_HOLD, + SYS_VARS AS SYS_VARS, + PARAM_INFOS AS PARAM_INFOS FROM SYS.GV$OB_PL_CACHE_OBJECT WHERE SVR_IP =HOST_IP() AND SVR_PORT = RPC_PORT() """.replace("\n", " "), normal_columns = [ diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result index c8f4b1cc4..8f3ad1175 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result @@ -5747,6 +5747,8 @@ PL_EVICT_VERSION bigint(20) NO NULL PS_STMT_ID bigint(20) NO NULL DB_ID bigint(20) unsigned NO NULL PL_CG_MEM_HOLD bigint(20) NO NULL +SYS_VARS varchar(4096) NO NULL +PARAM_INFOS longtext NO NULL select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.GV$OB_PL_CACHE_OBJECT limit 1); cnt 1 @@ -5775,6 +5777,8 @@ PL_EVICT_VERSION bigint(20) NO PS_STMT_ID bigint(20) NO DB_ID bigint(20) unsigned NO PL_CG_MEM_HOLD bigint(20) NO +SYS_VARS varchar(4096) NO +PARAM_INFOS longtext NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.V$OB_PL_CACHE_OBJECT limit 1); cnt 1 diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result index cc6e11ea3..4cae96b01 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result @@ -8058,6 +8058,8 @@ PL_EVICT_VERSION bigint(20) NO NULL PS_STMT_ID bigint(20) NO NULL DB_ID bigint(20) unsigned NO NULL PL_CG_MEM_HOLD bigint(20) NO NULL +SYS_VARS varchar(4096) NO NULL +PARAM_INFOS longtext NO NULL select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.GV$OB_PL_CACHE_OBJECT limit 1); cnt 1 @@ -8086,6 +8088,8 @@ PL_EVICT_VERSION bigint(20) NO PS_STMT_ID bigint(20) NO DB_ID bigint(20) unsigned NO PL_CG_MEM_HOLD bigint(20) NO +SYS_VARS varchar(4096) NO +PARAM_INFOS longtext NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.V$OB_PL_CACHE_OBJECT limit 1); cnt 1