MySQL Slow Query Full-Chain Diagnostics
SkillDatabases & dataEnd-to-end diagnosis of MySQL slow queries. Enable/analyze the slow query log, identify Top-N slow SQL, inspect execution plans with EXPLAIN, detect missing indexes, full table scans, large result sets, and lock waits, then output a structured report with optimization suggestions. Supports MySQL 5.7
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the MySQL Slow Query Full-Chain Diagnostics skill
What this skill tells your AI
The instructions your AI receives, as published by seed-forge/harness-ai-kit in skills/diag-mysql-slow-query/SKILL.md and read by ahel’s review.
用途
当用户报告查询慢、接口超时、或怀疑 SQL 性能问题时触发。覆盖:
- 接口响应变慢,怀疑数据库层
SHOW PROCESSLIST看到大量Sending data/Waiting for table metadata lock- 慢查询日志告警
- 定期慢 SQL 巡检
本技能是自包含诊断 Runbook。
输入
- MySQL 连接信息(host / port / user / password)
- 可选:已知慢 SQL 片段或时间段
输出
- 慢查询分析报告(填充输出模板)
- Top-N 慢 SQL + EXPLAIN 结果 + 优化建议
前置条件
| 项 | 要求 |
|---|---|
| MySQL 权限 | PROCESS, SELECT(performance_schema) |
| 版本 | MySQL 5.7+(8.0 优先用 performance_schema) |
诊断步骤
Step 1: 检查慢查询日志配置
SHOW VARIABLES LIKE 'slow_query_log'; -- 是否开启
SHOW VARIABLES LIKE 'slow_query_log_file'; -- 日志路径
SHOW VARIABLES LIKE 'long_query_time'; -- 阈值(秒)
SHOW VARIABLES LIKE 'log_queries_not_using_indexes'; -- 是否记录无索引查询
SHOW VARIABLES LIKE 'min_examined_row_limit';
如果未开启,建议临时开启(需 SUPER 权限):
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = ON;
Step 2: 从 performance_schema 获取 Top-N 慢 SQL(MySQL 8.0+)
SELECT
DIGEST_TEXT AS query_pattern,
COUNT_STAR AS exec_count,
ROUND(SUM_TIMER_WAIT / 1000000000000, 2) AS total_time_s,
ROUND(AVG_TIMER_WAIT / 1000000000000, 4) AS avg_time_s,
SUM_ROWS_EXAMINED AS rows_examined,
SUM_ROWS_SENT AS rows_sent,
SUM_NO_INDEX_USED AS no_index_count,
FIRST_SEEN, LAST_SEEN
FROM performance_schema.events_statements_summary_by_digest
WHERE SCHEMA_NAME IS NOT NULL
AND DIGEST_TEXT NOT LIKE 'SHOW%'
AND DIGEST_TEXT NOT LIKE 'SET%'
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 20;
Step 3: EXPLAIN 可疑 SQL
EXPLAIN FORMAT=JSON {slow_query};
-- 或
EXPLAIN ANALYZE {slow_query}; -- MySQL 8.0.18+
关注:
| 字段 | 问题信号 |
|---|---|
type = ALL | 全表扫描 |
rows >> 实际返回行数 | 扫描过多 |
Extra = Using filesort | 排序未用索引 |
Extra = Using temporary | 临时表 |
possible_keys = NULL | 无可用索引 |
Step 4: 检查缺失索引
-- 未使用索引的查询统计(8.0+)
SELECT
OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,
COUNT_STAR, COUNT_READ, COUNT_WRITE
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE INDEX_NAME IS NULL
AND OBJECT_SCHEMA NOT IN ('mysql', 'performance_schema', 'information_schema')
ORDER BY COUNT_STAR DESC
LIMIT 20;
Step 5: 检查表统计信息是否过期
-- 统计信息最后更新时间(8.0+)
SELECT
TABLE_SCHEMA, TABLE_NAME,
TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, INDEX_LENGTH,
UPDATE_TIME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql', 'performance_schema', 'information_schema', 'sys')
ORDER BY TABLE_ROWS DESC
LIMIT 20;
-- 手动刷新统计信息
ANALYZE TABLE {schema}.{table};
输出模板
MySQL Slow Query Analysis Report
════════════════════════════════════════
Instance: {host}:{port}
Analysis Time: {timestamp}
Slow Query Log: {enabled/disabled} (threshold: {long_query_time}s)
Top-10 Slow Queries (by total time)
────────────────────────────────────────
#1 {query_pattern_1}
Exec: {exec_count}x | Avg: {avg_time}s | Rows examined: {rows_examined}
No index used: {no_index_count}x
Last seen: {last_seen}
#2 {query_pattern_2}
...
EXPLAIN Summary
────────────────────────────────────────
Query #1: type={type} | rows={rows} | Extra={extra}
Issue: {full_scan / filesort / temporary / no_index}
Missing Indexes
| Table | Column(s) | Impact |
|-----------------|----------------|---------------|
| {table_1} | {columns} | {exec_count}x |
Stale Statistics
{tables with UPDATE_TIME > 7 days ago}
Root Cause
{root_cause_analysis}
Recommendations
1. [Index] {add_index_suggestion}
2. [Query] {rewrite_suggestion}
3. [Config] {config_suggestion}
告警阈值
| 指标 | Warning | Critical |
|---|---|---|
| Avg query time | > 1s | > 5s |
| Queries without index/min | > 10 | > 50 |
| Full table scans/min | > 100 | > 500 |
| Rows examined/rows sent ratio | > 100:1 | > 1000:1 |
推荐输出格式
执行完毕后输出诊断报告:
结论:<正常 / 发现问题>
| 排查环节 | 发现 | 证据 |
|---|---|---|
| ... | {...} | {...} |
根因:<定位> 修复建议:<可执行步骤>
约束
- 所有 SQL 均为只读查询。
SET GLOBAL仅用于临时开启慢查询日志,诊断完成后建议恢复。 - 不猜测密码;连接信息缺失时提示用户补充。
EXPLAIN ANALYZE会实际执行查询,确认用户同意后再运行。
Quick Reference
| 动作 | 查询 |
|---|---|
| 慢查询日志状态 | SHOW VARIABLES LIKE 'slow_query_log%' |
| Top 慢 SQL (8.0) | SELECT ... FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC |
| EXPLAIN | EXPLAIN FORMAT=JSON {sql} |
| 缺失索引 | performance_schema.table_io_waits_summary_by_index_usage WHERE INDEX_NAME IS NULL |
| 刷新统计 | ANALYZE TABLE {schema}.{table} |
示例
用户说:「db-prod-01 最近接口变慢了,帮忙看看 SQL」
Agent 执行 Step 1-5,输出 Top-10 慢 SQL、EXPLAIN 分析、缺失索引建议。
专题引用
无外部 references——本技能为自包含诊断 Runbook。
如需 MySQL 数据源连接管理,联动 infra-datasource-ops。
Signals
- GitHub stars
- 22
- Forks
- 2
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
diag-mysql-slow-query- Source
- github.com/seed-forge/harness-ai-kit