diff --git a/src/observer/virtual_table/ob_virtual_show_trace.cpp b/src/observer/virtual_table/ob_virtual_show_trace.cpp index 2e62eab53f..97b52b5677 100644 --- a/src/observer/virtual_table/ob_virtual_show_trace.cpp +++ b/src/observer/virtual_table/ob_virtual_show_trace.cpp @@ -112,7 +112,7 @@ int ObVirtualShowTrace::retrive_all_span_info() LOG_TRACE("send inner sql to retrive records", KP(session_), K(session_->get_proxy_sessid()), K(session_->get_sessid()), K(table_name), K(tenant_id_), K(trace_id_), K(trace_id), - K(effective_tenant_id_)); + K(effective_tenant_id_), K(ObString(sql_len, sql))); if (sql_len >= OB_MAX_SQL_LENGTH || sql_len <= 0) { ret = OB_SIZE_OVERFLOW; SERVER_LOG(WARN, "failed to format sql. size not enough"); @@ -284,8 +284,9 @@ int ObVirtualShowTrace::generate_span_info_tree() if (OB_FAIL(ret)) { // do nothing } else if (!found_root) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("not found root span reset show trace", K(session_->get_last_flt_span_id()), K(session_->get_last_flt_trace_id())); show_trace_arr_.reset(); - LOG_INFO("not found root span reset show trace"); } else { // recursively generate span tree for (int64_t i = 0; OB_SUCC(ret) && i < root_arr.count(); ++i) { diff --git a/src/sql/monitor/flt/ob_flt_utils.cpp b/src/sql/monitor/flt/ob_flt_utils.cpp index 1db157fdb8..67996fe0a1 100644 --- a/src/sql/monitor/flt/ob_flt_utils.cpp +++ b/src/sql/monitor/flt/ob_flt_utils.cpp @@ -133,7 +133,6 @@ namespace sql session.set_auto_flush_trace(false); session.set_trace_enable(false); } - OZ(ObFLTUtils::init_flt_show_trace_env(session)); return ret; } @@ -412,7 +411,13 @@ namespace sql sid.deserialize(span_id.ptr(), span_id.length(), pos); OBTRACE->init(tid, sid); FLT_SET_TRACE_LEVEL(sess.get_control_info().level_); + if (sess.is_use_trace_log()) { + sess.set_auto_flush_trace(true); + } FLT_SET_AUTO_FLUSH(sess.is_auto_flush_trace()); + char last_trace_id[OB_MAX_UUID_STR_LENGTH + 1]; + pos = 0; + sid.tostring(last_trace_id, OB_MAX_UUID_STR_LENGTH + 1, pos); } // update trace_id by server self } else { @@ -429,6 +434,9 @@ namespace sql } } FLT_SET_TRACE_LEVEL(sess.get_control_info().level_); + if (sess.is_use_trace_log()) { + sess.set_auto_flush_trace(true); + } FLT_SET_AUTO_FLUSH(sess.is_auto_flush_trace()); } @@ -567,14 +575,22 @@ namespace sql // record span if (OB_FAIL(ret)) { // do nothing - } else if (OB_FAIL(flt_span_manager->record_span(data))) { - if (OB_SIZE_OVERFLOW == ret || OB_ALLOCATE_MEMORY_FAILED == ret) { - LOG_TRACE("cannot allocate mem for record", K(ret)); - ret = OB_SUCCESS; - } else { - if (REACH_TIME_INTERVAL(100 * 1000)) { // in case logging is too frequent - LOG_WARN("failed to record request info in request manager", K(ret)); + } else { + while (true) { + if (OB_FAIL(flt_span_manager->record_span(data))) { + if (OB_SIZE_OVERFLOW == ret || OB_ALLOCATE_MEMORY_FAILED == ret) { + LOG_TRACE("cannot allocate mem for record", K(ret)); + ret = OB_SUCCESS; + } else { + if (REACH_TIME_INTERVAL(100 * 1000)) { // in case logging is too frequent + LOG_WARN("failed to record request info in request manager", K(ret)); + } + } } + // If the slot is full, a certain amount of + // internal space will be released, + // and it needs to be added again + if (ret != OB_ENTRY_NOT_EXIST) break; } } } diff --git a/src/sql/resolver/cmd/ob_show_resolver.cpp b/src/sql/resolver/cmd/ob_show_resolver.cpp index 21fac49bbe..6d3a0c70d4 100644 --- a/src/sql/resolver/cmd/ob_show_resolver.cpp +++ b/src/sql/resolver/cmd/ob_show_resolver.cpp @@ -709,6 +709,9 @@ int ObShowResolver::resolve(const ParseNode &parse_tree) if (OB_UNLIKELY(parse_tree.num_child_ != 2 || NULL == parse_tree.children_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("parse tree is wrong", K(ret), K(parse_tree.num_child_), K(parse_tree.children_)); + } else if (!session_info_->get_control_info().is_valid()) { + ret = OB_NOT_SUPPORTED; + LOG_USER_ERROR(OB_NOT_SUPPORTED, "If full link tracing is not enabled, show trace is"); } else { show_resv_ctx.condition_node_ = parse_tree.children_[0]; show_resv_ctx.stmt_type_ = stmt::T_SHOW_TRACE;