@@ -23,6 +23,7 @@ import (
23
23
"math/rand"
24
24
"os"
25
25
"path/filepath"
26
+ "strconv"
26
27
"strings"
27
28
"sync"
28
29
"time"
@@ -48,6 +49,8 @@ const (
48
49
const (
49
50
// ExtractTaskType indicates type of extract task
50
51
ExtractTaskType = "taskType"
52
+ // ExtractPlanTaskSkipStats indicates skip stats for extract plan task
53
+ ExtractPlanTaskSkipStats = "SkipStats"
51
54
)
52
55
53
56
// ExtractType indicates type
@@ -102,6 +105,10 @@ type ExtractTask struct {
102
105
ExtractType ExtractType
103
106
IsBackgroundJob bool
104
107
108
+ // Param for Extract Plan
109
+ SkipStats bool
110
+ UseHistoryView bool
111
+
105
112
// variables for plan task type
106
113
Begin time.Time
107
114
End time.Time
@@ -132,7 +139,7 @@ func (w *extractWorker) extractTask(ctx context.Context, task *ExtractTask) (str
132
139
}
133
140
134
141
func (w * extractWorker ) extractPlanTask (ctx context.Context , task * ExtractTask ) (string , error ) {
135
- if ! config .GetGlobalConfig ().Instance .StmtSummaryEnablePersistent {
142
+ if task . UseHistoryView && ! config .GetGlobalConfig ().Instance .StmtSummaryEnablePersistent {
136
143
return "" , errors .New ("tidb_stmt_summary_enable_persistent should be enabled for extract task" )
137
144
}
138
145
records , err := w .collectRecords (ctx , task )
@@ -145,16 +152,20 @@ func (w *extractWorker) extractPlanTask(ctx context.Context, task *ExtractTask)
145
152
logutil .BgLogger ().Error ("package stmt summary records failed for extract plan task" , zap .Error (err ))
146
153
return "" , err
147
154
}
148
- return w .dumpExtractPlanPackage (p )
155
+ return w .dumpExtractPlanPackage (task , p )
149
156
}
150
157
151
158
func (w * extractWorker ) collectRecords (ctx context.Context , task * ExtractTask ) (map [stmtSummaryHistoryKey ]* stmtSummaryHistoryRecord , error ) {
152
159
w .Lock ()
153
160
defer w .Unlock ()
154
161
exec := w .sctx .(sqlexec.RestrictedSQLExecutor )
155
162
ctx1 := kv .WithInternalSourceType (ctx , kv .InternalTxnStats )
156
- rows , _ , err := exec .ExecRestrictedSQL (ctx1 , nil , fmt .Sprintf ("SELECT STMT_TYPE, DIGEST, PLAN_DIGEST,QUERY_SAMPLE_TEXT, BINARY_PLAN, TABLE_NAMES FROM INFORMATION_SCHEMA.STATEMENTS_SUMMARY_HISTORY WHERE SUMMARY_END_TIME > '%s' OR SUMMARY_BEGIN_TIME < '%s'" ,
157
- task .Begin .Format (types .TimeFormat ), task .End .Format (types .TimeFormat )))
163
+ sourceTable := "STATEMENTS_SUMMARY_HISTORY"
164
+ if ! task .UseHistoryView {
165
+ sourceTable = "STATEMENTS_SUMMARY"
166
+ }
167
+ rows , _ , err := exec .ExecRestrictedSQL (ctx1 , nil , fmt .Sprintf ("SELECT STMT_TYPE, DIGEST, PLAN_DIGEST,QUERY_SAMPLE_TEXT, BINARY_PLAN, TABLE_NAMES, SAMPLE_USER FROM INFORMATION_SCHEMA.%s WHERE SUMMARY_END_TIME > '%s' OR SUMMARY_BEGIN_TIME < '%s'" ,
168
+ sourceTable , task .Begin .Format (types .TimeFormat ), task .End .Format (types .TimeFormat )))
158
169
if err != nil {
159
170
return nil , err
160
171
}
@@ -171,6 +182,7 @@ func (w *extractWorker) collectRecords(ctx context.Context, task *ExtractTask) (
171
182
digest : record .digest ,
172
183
planDigest : record .planDigest ,
173
184
}
185
+ record .userName = row .GetString (6 )
174
186
record .tables = make ([]tableNamePair , 0 )
175
187
setRecord , err := w .handleTableNames (tableNames , record )
176
188
if err != nil {
@@ -324,7 +336,7 @@ func (w *extractWorker) decodeBinaryPlan(ctx context.Context, bPlan string) (str
324
336
| |-digest1.sql
325
337
| |-...
326
338
*/
327
- func (w * extractWorker ) dumpExtractPlanPackage (p * extractPlanPackage ) (name string , err error ) {
339
+ func (w * extractWorker ) dumpExtractPlanPackage (task * ExtractTask , p * extractPlanPackage ) (name string , err error ) {
328
340
f , name , err := GenerateExtractFile ()
329
341
if err != nil {
330
342
return "" , err
@@ -351,7 +363,7 @@ func (w *extractWorker) dumpExtractPlanPackage(p *extractPlanPackage) (name stri
351
363
return "" , err
352
364
}
353
365
// dump extract plan task meta
354
- if err = dumpExtractMeta (ExtractPlanType , zw ); err != nil {
366
+ if err = dumpExtractMeta (task , zw ); err != nil {
355
367
return "" , err
356
368
}
357
369
// Dump Schema and View
@@ -371,8 +383,10 @@ func (w *extractWorker) dumpExtractPlanPackage(p *extractPlanPackage) (name stri
371
383
return "" , err
372
384
}
373
385
// Dump stats
374
- if err = dumpStats (zw , p .tables , GetDomain (w .sctx )); err != nil {
375
- return "" , err
386
+ if ! task .SkipStats {
387
+ if err = dumpStats (zw , p .tables , GetDomain (w .sctx )); err != nil {
388
+ return "" , err
389
+ }
376
390
}
377
391
// Dump sqls and plan
378
392
if err = dumpSQLRecords (p .records , zw ); err != nil {
@@ -404,6 +418,7 @@ type singleSQLRecord struct {
404
418
SQL string `json:"sql"`
405
419
Digest string `json:"digest"`
406
420
BinaryPlan string `json:"binaryPlan"`
421
+ UserName string `json:"userName"`
407
422
}
408
423
409
424
// dumpSQLRecord dumps sql records into one file for each record, the format is in json.
@@ -418,6 +433,7 @@ func dumpSQLRecord(record *stmtSummaryHistoryRecord, path string, zw *zip.Writer
418
433
SQL : record .sql ,
419
434
Digest : record .digest ,
420
435
BinaryPlan : record .binaryPlan ,
436
+ UserName : record .userName ,
421
437
}
422
438
content , err := json .Marshal (singleSQLRecord )
423
439
if err != nil {
@@ -430,13 +446,18 @@ func dumpSQLRecord(record *stmtSummaryHistoryRecord, path string, zw *zip.Writer
430
446
return nil
431
447
}
432
448
433
- func dumpExtractMeta (t ExtractType , zw * zip.Writer ) error {
449
+ func dumpExtractMeta (task * ExtractTask , zw * zip.Writer ) error {
434
450
cf , err := zw .Create (ExtractMetaFile )
435
451
if err != nil {
436
452
return errors .AddStack (err )
437
453
}
438
454
varMap := make (map [string ]string )
439
- varMap [ExtractTaskType ] = taskTypeToString (t )
455
+ varMap [ExtractTaskType ] = taskTypeToString (task .ExtractType )
456
+ switch task .ExtractType {
457
+ case ExtractPlanType :
458
+ varMap [ExtractPlanTaskSkipStats ] = strconv .FormatBool (task .SkipStats )
459
+ }
460
+
440
461
if err := toml .NewEncoder (cf ).Encode (varMap ); err != nil {
441
462
return errors .AddStack (err )
442
463
}
@@ -461,6 +482,7 @@ type stmtSummaryHistoryRecord struct {
461
482
planDigest string
462
483
sql string
463
484
binaryPlan string
485
+ userName string
464
486
465
487
plan string
466
488
skip bool
0 commit comments