From 3dbb519d4bed6bb6e5242d4603747bb14fd4932d Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Tue, 4 Jun 2019 12:51:58 +0800 Subject: [PATCH 1/5] infoschema/slow_query: add ip column. --- infoschema/slow_log.go | 13 ++++++++++++- infoschema/slow_log_test.go | 2 +- infoschema/tables_test.go | 4 ++-- sessionctx/variable/session.go | 2 ++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/infoschema/slow_log.go b/infoschema/slow_log.go index 68a0053eb81d4..ee07eb48f522b 100644 --- a/infoschema/slow_log.go +++ b/infoschema/slow_log.go @@ -37,6 +37,7 @@ var slowQueryCols = []columnInfo{ {variable.SlowLogTimeStr, mysql.TypeTimestamp, 26, 0, nil, nil}, {variable.SlowLogTxnStartTSStr, mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, {variable.SlowLogUserStr, mysql.TypeVarchar, 64, 0, nil, nil}, + {variable.SlowLogIPStr, mysql.TypeVarchar, 64, 0, nil, nil}, {variable.SlowLogConnIDStr, mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, {variable.SlowLogQueryTimeStr, mysql.TypeDouble, 22, 0, nil, nil}, {execdetails.ProcessTimeStr, mysql.TypeDouble, 22, 0, nil, nil}, @@ -162,6 +163,7 @@ type slowQueryTuple struct { time time.Time txnStartTs uint64 user string + ip string connID uint64 queryTime float64 processTime float64 @@ -205,7 +207,15 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string) } st.txnStartTs = num case variable.SlowLogUserStr: - st.user = value + fields := strings.SplitN(value, "@", 2) + if len(field) > 1 { + // To avoid shallow copy. + st.user = string([]byte(fields[0])) + } + if len(field) > 2 { + // To avoid shallow copy. + st.ip = string([]byte(fields[1])) + } case variable.SlowLogConnIDStr: num, err := strconv.ParseUint(value, 10, 64) if err != nil { @@ -325,6 +335,7 @@ func (st *slowQueryTuple) convertToDatumRow() []types.Datum { })) record = append(record, types.NewUintDatum(st.txnStartTs)) record = append(record, types.NewStringDatum(st.user)) + record = append(record, types.NewStringDatum(st.ip)) record = append(record, types.NewUintDatum(st.connID)) record = append(record, types.NewFloat64Datum(st.queryTime)) record = append(record, types.NewFloat64Datum(st.processTime)) diff --git a/infoschema/slow_log_test.go b/infoschema/slow_log_test.go index 5692f609c8a47..1dc076af79948 100644 --- a/infoschema/slow_log_test.go +++ b/infoschema/slow_log_test.go @@ -53,7 +53,7 @@ select * from t;`) } recordString += str } - expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,,0,0.216905,0.021,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,select * from t;" + expectRecordString := "2019-04-28 15:24:04.309074,405888132465033227,,,0,0.216905,0.021,0,0,1,637,0,,,1,42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772,t1:1,t2:2,0.1,0.2,0.03,127.0.0.1:20160,0.05,0.6,0.8,0.0.0.0:20160,70724,select * from t;" c.Assert(expectRecordString, Equals, recordString) // fix sql contain '# ' bug diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 31020e99ed846..18f42d78d0948 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -352,10 +352,10 @@ select * from t_slim;`)) tk.MustExec("set time_zone = '+08:00';") re := tk.MustQuery("select * from information_schema.slow_query") re.Check(testutil.RowsWithSep("|", - "2019-02-12 19:33:56.571953|406315658548871171|root@127.0.0.1|6|4.895492|0.161|0.101|0.092|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|select * from t_slim;")) + "2019-02-12 19:33:56.571953|406315658548871171|root|127.0.0.1|6|4.895492|0.161|0.101|0.092|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|select * from t_slim;")) tk.MustExec("set time_zone = '+00:00';") re = tk.MustQuery("select * from information_schema.slow_query") - re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root@127.0.0.1|6|4.895492|0.161|0.101|0.092|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|select * from t_slim;")) + re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|127.0.0.1|6|4.895492|0.161|0.101|0.092|1|100001|100000|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|select * from t_slim;")) } func (s *testTableSuite) TestForAnalyzeStatus(c *C) { diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 1d27574a76875..8f5fdf50552bb 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -949,6 +949,8 @@ const ( SlowLogTxnStartTSStr = "Txn_start_ts" // SlowLogUserStr is slow log field name. SlowLogUserStr = "User" + // SlowLogIPStr only for slow_query table usage. + SlowLogIPStr = "IP" // SlowLogConnIDStr is slow log field name. SlowLogConnIDStr = "Conn_ID" // SlowLogQueryTimeStr is slow log field name. From 1e9d176bfd0f29ad5c311df75cabf6b197f3027a Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Tue, 4 Jun 2019 13:28:20 +0800 Subject: [PATCH 2/5] remove redundant code --- infoschema/slow_log.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/infoschema/slow_log.go b/infoschema/slow_log.go index ee07eb48f522b..c2e7f810fe7e7 100644 --- a/infoschema/slow_log.go +++ b/infoschema/slow_log.go @@ -209,12 +209,10 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string) case variable.SlowLogUserStr: fields := strings.SplitN(value, "@", 2) if len(field) > 1 { - // To avoid shallow copy. - st.user = string([]byte(fields[0])) + st.user = fields[0] } if len(field) > 2 { - // To avoid shallow copy. - st.ip = string([]byte(fields[1])) + st.ip = fields[1] } case variable.SlowLogConnIDStr: num, err := strconv.ParseUint(value, 10, 64) From 53c558d3fa62f29d4586e4e98882a9970d8dba0b Mon Sep 17 00:00:00 2001 From: crazycs Date: Tue, 4 Jun 2019 14:40:31 +0800 Subject: [PATCH 3/5] Update infoschema/slow_log.go Co-Authored-By: Zhang Jian --- infoschema/slow_log.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infoschema/slow_log.go b/infoschema/slow_log.go index c2e7f810fe7e7..4f6025b76165b 100644 --- a/infoschema/slow_log.go +++ b/infoschema/slow_log.go @@ -208,7 +208,7 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string) st.txnStartTs = num case variable.SlowLogUserStr: fields := strings.SplitN(value, "@", 2) - if len(field) > 1 { + if len(field) > 0 { st.user = fields[0] } if len(field) > 2 { From 6aa6364d64db9ed437e893c98ccd0d2ae196ef08 Mon Sep 17 00:00:00 2001 From: crazycs Date: Tue, 4 Jun 2019 14:40:40 +0800 Subject: [PATCH 4/5] Update infoschema/slow_log.go Co-Authored-By: Zhang Jian --- infoschema/slow_log.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infoschema/slow_log.go b/infoschema/slow_log.go index 4f6025b76165b..70fe2ffd16ea3 100644 --- a/infoschema/slow_log.go +++ b/infoschema/slow_log.go @@ -211,7 +211,7 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string) if len(field) > 0 { st.user = fields[0] } - if len(field) > 2 { + if len(field) > 1 { st.ip = fields[1] } case variable.SlowLogConnIDStr: From 574d509c00e73ab610e846de0d83c69eaf45ffd5 Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Tue, 4 Jun 2019 14:50:49 +0800 Subject: [PATCH 5/5] address comment --- infoschema/slow_log.go | 8 ++++---- sessionctx/variable/session.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/infoschema/slow_log.go b/infoschema/slow_log.go index c2e7f810fe7e7..fbb1c99c2236b 100644 --- a/infoschema/slow_log.go +++ b/infoschema/slow_log.go @@ -37,7 +37,7 @@ var slowQueryCols = []columnInfo{ {variable.SlowLogTimeStr, mysql.TypeTimestamp, 26, 0, nil, nil}, {variable.SlowLogTxnStartTSStr, mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, {variable.SlowLogUserStr, mysql.TypeVarchar, 64, 0, nil, nil}, - {variable.SlowLogIPStr, mysql.TypeVarchar, 64, 0, nil, nil}, + {variable.SlowLogHostStr, mysql.TypeVarchar, 64, 0, nil, nil}, {variable.SlowLogConnIDStr, mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, {variable.SlowLogQueryTimeStr, mysql.TypeDouble, 22, 0, nil, nil}, {execdetails.ProcessTimeStr, mysql.TypeDouble, 22, 0, nil, nil}, @@ -163,7 +163,7 @@ type slowQueryTuple struct { time time.Time txnStartTs uint64 user string - ip string + host string connID uint64 queryTime float64 processTime float64 @@ -212,7 +212,7 @@ func (st *slowQueryTuple) setFieldValue(tz *time.Location, field, value string) st.user = fields[0] } if len(field) > 2 { - st.ip = fields[1] + st.host = fields[1] } case variable.SlowLogConnIDStr: num, err := strconv.ParseUint(value, 10, 64) @@ -333,7 +333,7 @@ func (st *slowQueryTuple) convertToDatumRow() []types.Datum { })) record = append(record, types.NewUintDatum(st.txnStartTs)) record = append(record, types.NewStringDatum(st.user)) - record = append(record, types.NewStringDatum(st.ip)) + record = append(record, types.NewStringDatum(st.host)) record = append(record, types.NewUintDatum(st.connID)) record = append(record, types.NewFloat64Datum(st.queryTime)) record = append(record, types.NewFloat64Datum(st.processTime)) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 8f5fdf50552bb..6202a8f3cb7e7 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -949,8 +949,8 @@ const ( SlowLogTxnStartTSStr = "Txn_start_ts" // SlowLogUserStr is slow log field name. SlowLogUserStr = "User" - // SlowLogIPStr only for slow_query table usage. - SlowLogIPStr = "IP" + // SlowLogHostStr only for slow_query table usage. + SlowLogHostStr = "Host" // SlowLogConnIDStr is slow log field name. SlowLogConnIDStr = "Conn_ID" // SlowLogQueryTimeStr is slow log field name.