@@ -42,7 +42,10 @@ const perfEventsStatementsQuery = `
42
42
SUM_CREATED_TMP_TABLES,
43
43
SUM_SORT_MERGE_PASSES,
44
44
SUM_SORT_ROWS,
45
- SUM_NO_INDEX_USED
45
+ SUM_NO_INDEX_USED,
46
+ QUANTILE_95,
47
+ QUANTILE_99,
48
+ QUANTILE_999
46
49
FROM (
47
50
SELECT *
48
51
FROM performance_schema.events_statements_summary_by_digest
@@ -67,7 +70,10 @@ const perfEventsStatementsQuery = `
67
70
Q.SUM_CREATED_TMP_TABLES,
68
71
Q.SUM_SORT_MERGE_PASSES,
69
72
Q.SUM_SORT_ROWS,
70
- Q.SUM_NO_INDEX_USED
73
+ Q.SUM_NO_INDEX_USED,
74
+ Q.QUANTILE_95,
75
+ Q.QUANTILE_99,
76
+ Q.QUANTILE_999
71
77
ORDER BY SUM_TIMER_WAIT DESC
72
78
LIMIT %d
73
79
`
@@ -144,6 +150,11 @@ var (
144
150
"The total number of statements that used full table scans by digest." ,
145
151
[]string {"schema" , "digest" , "digest_text" }, nil ,
146
152
)
153
+ performanceSchemaEventsStatementsLatency = prometheus .NewDesc (
154
+ prometheus .BuildFQName (namespace , performanceSchema , "events_statements_latency" ),
155
+ "A summary of statement latency by digest" ,
156
+ []string {"schema" , "digest" , "digest_text" }, nil ,
157
+ )
147
158
)
148
159
149
160
// ScrapePerfEventsStatements collects from `performance_schema.events_statements_summary_by_digest`.
@@ -208,10 +219,11 @@ func (c ScrapePerfEventsStatements) Scrape(ctx context.Context, instance *instan
208
219
tmpTables , tmpDiskTables uint64
209
220
sortMergePasses , sortRows uint64
210
221
noIndexUsed uint64
222
+ quantile95 , quantile99 , quantile999 uint64
211
223
)
212
224
for perfSchemaEventsStatementsRows .Next () {
213
225
if err := perfSchemaEventsStatementsRows .Scan (
214
- & schemaName , & digest , & digestText , & count , & queryTime , & lockTime , & cpuTime , & errors , & warnings , & rowsAffected , & rowsSent , & rowsExamined , & tmpDiskTables , & tmpTables , & sortMergePasses , & sortRows , & noIndexUsed ,
226
+ & schemaName , & digest , & digestText , & count , & queryTime , & lockTime , & cpuTime , & errors , & warnings , & rowsAffected , & rowsSent , & rowsExamined , & tmpDiskTables , & tmpTables , & sortMergePasses , & sortRows , & noIndexUsed , & quantile95 , & quantile99 , & quantile999 ,
215
227
); err != nil {
216
228
return err
217
229
}
@@ -271,6 +283,11 @@ func (c ScrapePerfEventsStatements) Scrape(ctx context.Context, instance *instan
271
283
performanceSchemaEventsStatementsNoIndexUsedDesc , prometheus .CounterValue , float64 (noIndexUsed ),
272
284
schemaName , digest , digestText ,
273
285
)
286
+ ch <- prometheus .MustNewConstSummary (performanceSchemaEventsStatementsLatency , count , float64 (queryTime )/ picoSeconds , map [float64 ]float64 {
287
+ 95 : float64 (quantile95 ) / picoSeconds ,
288
+ 99 : float64 (quantile99 ) / picoSeconds ,
289
+ 999 : float64 (quantile999 ) / picoSeconds ,
290
+ }, schemaName , digest , digestText )
274
291
}
275
292
return nil
276
293
}
0 commit comments