应使用Loki+Promtail解析慢日志并按sql_digest聚合,重点监控QPS与P95耗时联动面板,结合Logs Panel下钻查看完整SQL、执行时间及扫描行数,同时确认log_slow_extra=ON以获取全文。

如何在Grafana Dashboard里一眼识别高危慢SQL
Grafana 本身不直接执行 SQL,它只是可视化层。真正起作用的是背后的数据源(比如 mysqld_exporter 抓取的指标,或 loki 聚合的慢日志文本)。如果你看到的 Dashboard 只显示「慢查询次数」或「平均耗时」这类聚合值,那基本没法定位具体哪条 SQL 异常——你得确认它背后连的是什么数据源。
- 如果数据源是
mysqld_exporter:它暴露的是全局统计类指标(如mysql_global_status_slow_queries),只能告诉你“现在慢查询变多了”,但看不到语句内容、执行频率、单次耗时分布 - 如果数据源是
loki+promtail(解析mysql-slow.log):才能按 SQL 文本聚合,支持「按语句分组 → 查看 P95 耗时 → 统计每分钟执行次数」这种关键维度
没配对日志解析链路,Dashboard 上再漂亮的热力图也没法帮你揪出那条 SELECT * FROM order WHERE user_id = ? AND status = 'pending' ORDER BY created_at DESC LIMIT 20,20。
为什么执行频率比单次耗时更值得警惕
一条 SQL 耗时 800ms,但每秒只跑 1 次,影响有限;
同一条 SQL 耗时 300ms,但每秒执行 50 次,它可能吃掉数据库 30% 的 CPU 时间。
在 Grafana 中,你应该重点看两个面板联动:
-
count by (sql_digest) (rate(mysql_slow_log_count[5m])):过去 5 分钟内各 SQL 的 QPS -
histogram_quantile(0.95, sum(rate(mysql_slow_log_duration_seconds_bucket[5m])) by (le, sql_digest)):各 SQL 的 P95 耗时
容易踩的坑:
- 直接用
sum by (sql) (mysql_slow_log_count)看总量,掩盖了高频低耗时的“毛刺型”慢 SQL - 忽略
sql_digest(标准化后的语句哈希),把带不同参数的同一条 SQL 当成多条,导致频次被摊薄 - 没开
log_queries_not_using_indexes = 1,漏掉那些“快但不该快”的无索引查询——它们可能正悄悄拖垮缓冲池命中率
如何从 Dashboard 快速下钻到具体慢 SQL 原文
前提是你的日志采集链路已支持结构化解析(promtail 配了 regex 提取 sql_text 字段)。否则 Grafana 里只能看到一堆 # Time: 2026-05-09T10:23:41 开头的原始日志行。
满足条件后,在 Grafana 的 Logs Panel 中设置:
- 查询语句用:
{job="mysql-slow"} |~ <code>^# User@Host| line_format "{{.sql_text}} | {{.query_time}}s" - 过滤条件加:
| json | <strong>error</strong> = "" | query_time > 0.5 - 排序选:
query_time desc
这样点开任意一行,就能看到完整 SQL、实际执行时间、锁等待时间、扫描行数等。注意:MySQL 8.0+ 的慢日志默认不记录 sql_text 全文(出于安全考虑),需确认配置中开了 log_slow_extra = ON。
别依赖 Dashboard 的“自动告警阈值”
很多模板 Dashboard 默认设了「慢查询 > 10 次/分钟」就标红。这在 OLTP 场景可能是严重问题,在报表导出类业务里却属正常。
真正要盯住的是偏离基线的突变:
- 同一 SQL 的 QPS 突增 300%,即使耗时仍低于 200ms,也可能意味着缓存击穿或循环调用
- P95 耗时不变,但 P99 耗时从 500ms 涨到 3s,说明存在长尾阻塞(比如某次执行卡在锁等待)
- 慢查询集中在某个固定时间段(如每天凌晨 2 点),大概率是定时任务触发的未优化 SQL
这些模式靠静态阈值发现不了,得结合 loki 的日志流 + prometheus 的指标做交叉比对。最易被忽略的一点:Dashboard 显示“一切正常”时,慢 SQL 可能正藏在 log_output = TABLE 的 mysql.slow_log 表里——它根本没进任何监控管道。


















