diag-mysql-slow-querylisted
Install: claude install-skill seed-forge/harness-ai-kit
# MySQL Slow Query Full-Chain Diagnostics
## 用途
当用户报告查询慢、接口超时、或怀疑 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: 检查慢查询日志配置
```sql
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 权限):
```sql
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+)
```sql
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 '