diff --git a/domain/topn_slow_query.go b/domain/topn_slow_query.go index 4b5b4d51c1438..6b5fb228bbf9e 100644 --- a/domain/topn_slow_query.go +++ b/domain/topn_slow_query.go @@ -210,17 +210,17 @@ func (q *topNSlowQueries) Close() { // SlowQueryInfo is a struct to record slow query info. type SlowQueryInfo struct { - SQL string - Start time.Time - Duration time.Duration - Detail execdetails.ExecDetails - Succ bool - ConnID uint64 - TxnTS uint64 - User string - DB string - TableIDs string - IndexIDs string - Internal bool - Digest string + SQL string + Start time.Time + Duration time.Duration + Detail execdetails.ExecDetails + Succ bool + ConnID uint64 + TxnTS uint64 + User string + DB string + TableIDs string + IndexNames string + Internal bool + Digest string } diff --git a/executor/adapter.go b/executor/adapter.go index d1b71e2fd39f7..7c61c262b6868 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -395,12 +395,12 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool) { sessVars := a.Ctx.GetSessionVars() sql = QueryReplacer.Replace(sql) + sessVars.GetExecuteArgumentsInfo() - var tableIDs, indexIDs string + var tableIDs, indexNames string if len(sessVars.StmtCtx.TableIDs) > 0 { tableIDs = strings.Replace(fmt.Sprintf("%v", a.Ctx.GetSessionVars().StmtCtx.TableIDs), " ", ",", -1) } - if len(sessVars.StmtCtx.IndexIDs) > 0 { - indexIDs = strings.Replace(fmt.Sprintf("%v", a.Ctx.GetSessionVars().StmtCtx.IndexIDs), " ", ",", -1) + if len(sessVars.StmtCtx.IndexNames) > 0 { + indexNames = strings.Replace(fmt.Sprintf("%v", a.Ctx.GetSessionVars().StmtCtx.IndexNames), " ", ",", -1) } execDetail := sessVars.StmtCtx.GetExecDetails() copTaskInfo := sessVars.StmtCtx.CopTasksDetails() @@ -408,10 +408,10 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool) { memMax := sessVars.StmtCtx.MemTracker.MaxConsumed() if costTime < threshold { _, digest := sessVars.StmtCtx.SQLDigest() - logutil.SlowQueryLogger.Debug(sessVars.SlowLogFormat(txnTS, costTime, execDetail, indexIDs, digest, statsInfos, copTaskInfo, memMax, succ, sql)) + logutil.SlowQueryLogger.Debug(sessVars.SlowLogFormat(txnTS, costTime, execDetail, indexNames, digest, statsInfos, copTaskInfo, memMax, succ, sql)) } else { _, digest := sessVars.StmtCtx.SQLDigest() - logutil.SlowQueryLogger.Warn(sessVars.SlowLogFormat(txnTS, costTime, execDetail, indexIDs, digest, statsInfos, copTaskInfo, memMax, succ, sql)) + logutil.SlowQueryLogger.Warn(sessVars.SlowLogFormat(txnTS, costTime, execDetail, indexNames, digest, statsInfos, copTaskInfo, memMax, succ, sql)) metrics.TotalQueryProcHistogram.Observe(costTime.Seconds()) metrics.TotalCopProcHistogram.Observe(execDetail.ProcessTime.Seconds()) metrics.TotalCopWaitHistogram.Observe(execDetail.WaitTime.Seconds()) @@ -420,19 +420,19 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool) { userString = sessVars.User.String() } domain.GetDomain(a.Ctx).LogSlowQuery(&domain.SlowQueryInfo{ - SQL: sql, - Digest: digest, - Start: a.StartTime, - Duration: costTime, - Detail: sessVars.StmtCtx.GetExecDetails(), - Succ: succ, - ConnID: sessVars.ConnectionID, - TxnTS: txnTS, - User: userString, - DB: sessVars.CurrentDB, - TableIDs: tableIDs, - IndexIDs: indexIDs, - Internal: sessVars.InRestrictedSQL, + SQL: sql, + Digest: digest, + Start: a.StartTime, + Duration: costTime, + Detail: sessVars.StmtCtx.GetExecDetails(), + Succ: succ, + ConnID: sessVars.ConnectionID, + TxnTS: txnTS, + User: userString, + DB: sessVars.CurrentDB, + TableIDs: tableIDs, + IndexNames: indexNames, + Internal: sessVars.InRestrictedSQL, }) } } diff --git a/executor/builder.go b/executor/builder.go index 44dc241a41668..902b1d42d7e28 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -1867,7 +1867,7 @@ func (b *executorBuilder) buildIndexReader(v *plannercore.PhysicalIndexReader) * is := v.IndexPlans[0].(*plannercore.PhysicalIndexScan) ret.ranges = is.Ranges sctx := b.ctx.GetSessionVars().StmtCtx - sctx.IndexIDs = append(sctx.IndexIDs, is.Index.ID) + sctx.IndexNames = append(sctx.IndexNames, is.Table.Name.O+":"+is.Index.Name.O) return ret } @@ -1944,7 +1944,7 @@ func (b *executorBuilder) buildIndexLookUpReader(v *plannercore.PhysicalIndexLoo ret.ranges = is.Ranges metrics.ExecutorCounter.WithLabelValues("IndexLookUpExecutor").Inc() sctx := b.ctx.GetSessionVars().StmtCtx - sctx.IndexIDs = append(sctx.IndexIDs, is.Index.ID) + sctx.IndexNames = append(sctx.IndexNames, is.Table.Name.O+":"+is.Index.Name.O) sctx.TableIDs = append(sctx.TableIDs, ts.Table.ID) return ret } diff --git a/executor/executor.go b/executor/executor.go index c12d2efcbf20b..611184e737f5f 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -682,7 +682,7 @@ func (e *ShowSlowExec) Next(ctx context.Context, chk *chunk.Chunk) error { chk.AppendString(7, slow.User) chk.AppendString(8, slow.DB) chk.AppendString(9, slow.TableIDs) - chk.AppendString(10, slow.IndexIDs) + chk.AppendString(10, slow.IndexNames) if slow.Internal { chk.AppendInt64(11, 0) } else { diff --git a/infoschema/slow_log.go b/infoschema/slow_log.go index d08b2bbe1f222..3dd0466b97387 100644 --- a/infoschema/slow_log.go +++ b/infoschema/slow_log.go @@ -46,7 +46,7 @@ var slowQueryCols = []columnInfo{ {execdetails.TotalKeysStr, mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, {execdetails.ProcessKeysStr, mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, {variable.SlowLogDBStr, mysql.TypeVarchar, 64, 0, nil, nil}, - {variable.SlowLogIndexIDsStr, mysql.TypeVarchar, 100, 0, nil, nil}, + {variable.SlowLogIndexNamesStr, mysql.TypeVarchar, 100, 0, nil, nil}, {variable.SlowLogIsInternalStr, mysql.TypeTiny, 1, 0, nil, nil}, {variable.SlowLogDigestStr, mysql.TypeVarchar, 64, 0, nil, nil}, {variable.SlowLogStatsInfoStr, mysql.TypeVarchar, 512, 0, nil, nil}, @@ -228,7 +228,7 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string) st.processKeys, err = strconv.ParseUint(value, 10, 64) case variable.SlowLogDBStr: st.db = value - case variable.SlowLogIndexIDsStr: + case variable.SlowLogIndexNamesStr: st.indexIDs = value case variable.SlowLogIsInternalStr: st.isInternal = value == "true" diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index 3cf69b7d16dd5..9d742aef26eae 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -98,7 +98,7 @@ type StatementContext struct { MemTracker *memory.Tracker RuntimeStatsColl *execdetails.RuntimeStatsColl TableIDs []int64 - IndexIDs []int64 + IndexNames []string nowTs time.Time // use this variable for now/current_timestamp calculation/cache for one stmt stmtTimeCached bool StmtType string @@ -301,7 +301,7 @@ func (sc *StatementContext) ResetForRetry() { sc.mu.allExecDetails = make([]*execdetails.ExecDetails, 0, 4) sc.mu.Unlock() sc.TableIDs = sc.TableIDs[:0] - sc.IndexIDs = sc.IndexIDs[:0] + sc.IndexNames = sc.IndexNames[:0] } // MergeExecDetails merges a single region execution details into self, used to print diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 866f4a6df53b1..c7321432949da 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -809,8 +809,8 @@ const ( SlowLogDBStr = "DB" // SlowLogIsInternalStr is slow log field name. SlowLogIsInternalStr = "Is_internal" - // SlowLogIndexIDsStr is slow log field name. - SlowLogIndexIDsStr = "Index_ids" + // SlowLogIndexNamesStr is slow log field name. + SlowLogIndexNamesStr = "Index_names" // SlowLogDigestStr is slow log field name. SlowLogDigestStr = "Digest" // SlowLogQuerySQLStr is slow log field name. @@ -846,7 +846,7 @@ const ( // # Query_time: 4.895492 // # Process_time: 0.161 Request_count: 1 Total_keys: 100001 Processed_keys: 100000 // # DB: test -// # Index_ids: [1,2] +// # Index_names: [t1.idx1,t2.idx2] // # Is_internal: false // # Digest: 42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772 // # Stats: t1:1,t2:2 @@ -856,7 +856,7 @@ const ( // # Memory_max: 4096 // # Succ: true // select * from t_slim; -func (s *SessionVars) SlowLogFormat(txnTS uint64, costTime time.Duration, execDetail execdetails.ExecDetails, indexIDs string, digest string, +func (s *SessionVars) SlowLogFormat(txnTS uint64, costTime time.Duration, execDetail execdetails.ExecDetails, indexNames string, digest string, statsInfos map[string]uint64, copTasks *stmtctx.CopTasksDetails, memMax int64, succ bool, sql string) string { var buf bytes.Buffer execDetailStr := execDetail.String() @@ -874,8 +874,8 @@ func (s *SessionVars) SlowLogFormat(txnTS uint64, costTime time.Duration, execDe if len(s.CurrentDB) > 0 { buf.WriteString(SlowLogPrefixStr + SlowLogDBStr + SlowLogSpaceMarkStr + s.CurrentDB + "\n") } - if len(indexIDs) > 0 { - buf.WriteString(SlowLogPrefixStr + SlowLogIndexIDsStr + SlowLogSpaceMarkStr + indexIDs + "\n") + if len(indexNames) > 0 { + buf.WriteString(SlowLogPrefixStr + SlowLogIndexNamesStr + SlowLogSpaceMarkStr + indexNames + "\n") } buf.WriteString(SlowLogPrefixStr + SlowLogIsInternalStr + SlowLogSpaceMarkStr + strconv.FormatBool(s.InRestrictedSQL) + "\n") if len(digest) > 0 { diff --git a/sessionctx/variable/session_test.go b/sessionctx/variable/session_test.go index 956a160d4f739..702fecfc4406a 100644 --- a/sessionctx/variable/session_test.go +++ b/sessionctx/variable/session_test.go @@ -95,7 +95,7 @@ func (*testSessionSuite) TestSlowLogFormat(c *C) { # Query_time: 1 # Process_time: 2 Wait_time: 60 Backoff_time: 0.001 Request_count: 2 Total_keys: 10000 Process_keys: 20001 # DB: test -# Index_ids: [1,2] +# Index_names: [t1:a,t2:b] # Is_internal: true # Digest: 42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772 # Stats: t1:pseudo @@ -107,6 +107,6 @@ func (*testSessionSuite) TestSlowLogFormat(c *C) { select * from t;` sql := "select * from t" digest := parser.DigestHash(sql) - logString := seVar.SlowLogFormat(txnTS, costTime, execDetail, "[1,2]", digest, statsInfos, copTasks, memMax, true, sql) + logString := seVar.SlowLogFormat(txnTS, costTime, execDetail, "[t1:a,t2:b]", digest, statsInfos, copTasks, memMax, true, sql) c.Assert(logString, Equals, resultString) }