diff --git a/src/observer/virtual_table/ob_all_virtual_sql_plan.cpp b/src/observer/virtual_table/ob_all_virtual_sql_plan.cpp index 71a0d45e2d..9572da26b9 100644 --- a/src/observer/virtual_table/ob_all_virtual_sql_plan.cpp +++ b/src/observer/virtual_table/ob_all_virtual_sql_plan.cpp @@ -139,7 +139,7 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item) ObObj *cells = cur_row_.cells_; ObString ipstr; common::ObAddr addr; - + #define REFINE_LENGTH(len) ((len) > MAX_LENGTH ? MAX_LENGTH : (len)) if (OB_ISNULL(cells) || OB_ISNULL(plan_item)) { ret = OB_INVALID_ARGUMENT; SERVER_LOG(WARN, "invalid argument", K(cells)); @@ -237,7 +237,7 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item) break; } case OPTIMIZER: { - cells[cell_idx].set_varchar(plan_item->optimizer_, plan_item->optimizer_len_); + cells[cell_idx].set_varchar(plan_item->optimizer_, REFINE_LENGTH(plan_item->optimizer_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; @@ -291,19 +291,19 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item) break; } case OTHER_TAG: { - cells[cell_idx].set_varchar(plan_item->other_tag_, plan_item->other_tag_len_); + cells[cell_idx].set_varchar(plan_item->other_tag_, REFINE_LENGTH(plan_item->other_tag_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case PARTITION_START: { - cells[cell_idx].set_varchar(plan_item->partition_start_, plan_item->partition_start_len_); + cells[cell_idx].set_varchar(plan_item->partition_start_, REFINE_LENGTH(plan_item->partition_start_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case PARTITION_STOP: { - cells[cell_idx].set_varchar(plan_item->partition_stop_, plan_item->partition_stop_len_); + cells[cell_idx].set_varchar(plan_item->partition_stop_, REFINE_LENGTH(plan_item->partition_stop_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; @@ -313,7 +313,7 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item) break; } case OTHER: { - cells[cell_idx].set_varchar(plan_item->other_, plan_item->other_len_); + cells[cell_idx].set_varchar(plan_item->other_, REFINE_LENGTH(plan_item->other_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; @@ -337,31 +337,31 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item) break; } case ACCESS_PREDICATES: { - cells[cell_idx].set_varchar(plan_item->access_predicates_, plan_item->access_predicates_len_); + cells[cell_idx].set_varchar(plan_item->access_predicates_, REFINE_LENGTH(plan_item->access_predicates_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case FILTER_PREDICATES: { - cells[cell_idx].set_varchar(plan_item->filter_predicates_, plan_item->filter_predicates_len_); + cells[cell_idx].set_varchar(plan_item->filter_predicates_, REFINE_LENGTH(plan_item->filter_predicates_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case STARTUP_PREDICATES: { - cells[cell_idx].set_varchar(plan_item->startup_predicates_, plan_item->startup_predicates_len_); + cells[cell_idx].set_varchar(plan_item->startup_predicates_, REFINE_LENGTH(plan_item->startup_predicates_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case PROJECTION: { - cells[cell_idx].set_varchar(plan_item->projection_, plan_item->projection_len_); + cells[cell_idx].set_varchar(plan_item->projection_, REFINE_LENGTH(plan_item->projection_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case SPECIAL_PREDICATES: { - cells[cell_idx].set_varchar(plan_item->special_predicates_, plan_item->special_predicates_len_); + cells[cell_idx].set_varchar(plan_item->special_predicates_, REFINE_LENGTH(plan_item->special_predicates_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; @@ -377,13 +377,13 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item) break; } case REMARKS: { - cells[cell_idx].set_varchar(plan_item->remarks_, plan_item->remarks_len_); + cells[cell_idx].set_varchar(plan_item->remarks_, REFINE_LENGTH(plan_item->remarks_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; } case OTHER_XML: { - cells[cell_idx].set_varchar(plan_item->other_xml_, plan_item->other_xml_len_); + cells[cell_idx].set_varchar(plan_item->other_xml_, REFINE_LENGTH(plan_item->other_xml_len_)); cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); break; diff --git a/src/observer/virtual_table/ob_all_virtual_sql_plan.h b/src/observer/virtual_table/ob_all_virtual_sql_plan.h index 90114c2a70..8b87646f62 100644 --- a/src/observer/virtual_table/ob_all_virtual_sql_plan.h +++ b/src/observer/virtual_table/ob_all_virtual_sql_plan.h @@ -103,6 +103,7 @@ private: const static int64_t KEY_IP_IDX = 2; const static int64_t KEY_PORT_IDX = 3; const static int64_t ROWKEY_COUNT = 4; + const static int64_t MAX_LENGTH = 4000; struct PlanInfo { PlanInfo(); diff --git a/src/sql/ob_result_set.cpp b/src/sql/ob_result_set.cpp index 84745cac10..0804a0bbe6 100644 --- a/src/sql/ob_result_set.cpp +++ b/src/sql/ob_result_set.cpp @@ -792,6 +792,8 @@ int ObResultSet::close() if (OB_FAIL(my_session_.reset_tx_variable_if_remote_trans( physical_plan_->get_plan_type()))) { LOG_WARN("fail to reset tx_read_only if it is remote trans", K(ret)); + } else { + my_session_.set_last_plan_id(physical_plan_->get_plan_id()); } // 无论如何必须执行do_close_plan if (OB_UNLIKELY(OB_SUCCESS != (do_close_plan_ret = do_close_plan(errcode_, diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 2ae95dd544..77fbdd2039 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -2032,9 +2032,6 @@ int ObBasicSessionInfo::set_cur_phy_plan(ObPhysicalPlan *cur_phy_plan) void ObBasicSessionInfo::reset_cur_phy_plan_to_null() { - if (NULL != cur_phy_plan_) { - last_plan_id_ = cur_phy_plan_->get_plan_id(); - } cur_phy_plan_ = NULL; } diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index e5914d14b6..866489f793 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -1151,6 +1151,7 @@ public: const common::ObCurTraceId::TraceId &get_current_trace_id() const { return curr_trace_id_; } uint64_t get_current_plan_id() const { return plan_id_; } uint64_t get_last_plan_id() const { return last_plan_id_; } + void set_last_plan_id(uint64_t plan_id) { last_plan_id_ = plan_id; } void set_current_execution_id(int64_t execution_id) { current_execution_id_ = execution_id; } void set_last_trace_id(common::ObCurTraceId::TraceId *trace_id) { @@ -2058,8 +2059,7 @@ private: common::ObLogIdLevelMap log_id_level_map_; //=============================================================== - // 当前运行的physical_plan,目前只是用于获取该语句运行过程中哪些用户变量和额外的系统变量需要序列化, - // 而该语句执行完之后要将其设为NULL + // 生命周期不保证,谨慎使用该指针 ObPhysicalPlan *cur_phy_plan_; // sql_id of cur_phy_plan_ sql char sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1];