diff --git a/executor/set.go b/executor/set.go index 812e7469cecdf..335369e0deb34 100644 --- a/executor/set.go +++ b/executor/set.go @@ -188,7 +188,13 @@ func (e *SetExecutor) setSysVariable(name string, v *expression.VarAssignment) e valStr, err = value.ToString() terror.Log(err) } - logutil.BgLogger().Info("set session var", zap.Uint64("conn", sessionVars.ConnectionID), zap.String("name", name), zap.String("val", valStr)) + if name != variable.AutoCommit { + logutil.BgLogger().Info("set session var", zap.Uint64("conn", sessionVars.ConnectionID), zap.String("name", name), zap.String("val", valStr)) + } else { + // Some applications will set `autocommit` variable before query. + // This will print too many unnecessary log info. + logutil.BgLogger().Debug("set session var", zap.Uint64("conn", sessionVars.ConnectionID), zap.String("name", name), zap.String("val", valStr)) + } } if name == variable.TiDBEnableStmtSummary { diff --git a/server/conn.go b/server/conn.go index e2a5ba4e8702a..2189778cf5fe2 100644 --- a/server/conn.go +++ b/server/conn.go @@ -160,7 +160,7 @@ type clientConn struct { func (cc *clientConn) String() string { collationStr := mysql.Collations[cc.collation] - return fmt.Sprintf("id:%d, addr:%s status:%d, collation:%s, user:%s", + return fmt.Sprintf("id:%d, addr:%s status:%b, collation:%s, user:%s", cc.connectionID, cc.bufReadConn.RemoteAddr(), cc.ctx.Status(), collationStr, cc.user, ) } @@ -538,6 +538,20 @@ func (cc *clientConn) readOptionalSSLRequestAndHandshakeResponse(ctx context.Con return err } +func (cc *clientConn) SessionStatusToString() string { + status := cc.ctx.Status() + inTxn, autoCommit := 0, 0 + if status&mysql.ServerStatusInTrans > 0 { + inTxn = 1 + } + if status&mysql.ServerStatusAutocommit > 0 { + autoCommit = 1 + } + return fmt.Sprintf("inTxn:%d, autocommit:%d", + inTxn, autoCommit, + ) +} + func (cc *clientConn) openSessionAndDoAuth(authData []byte) error { var tlsStatePtr *tls.ConnectionState if cc.tlsConn != nil { @@ -674,6 +688,7 @@ func (cc *clientConn) Run(ctx context.Context) { logutil.Logger(ctx).Warn("command dispatched failed", zap.String("connInfo", cc.String()), zap.String("command", mysql.Command2Str[data[0]]), + zap.String("status", cc.SessionStatusToString()), zap.String("sql", queryStrForLog(string(data[1:]))), zap.String("err", errStrForLog(err)), )