面向生产环境的 MySQL 性能诊断与优化建议生成器
版本: v2.2 | 更新: 2026 年 1 月
MySQL Performance Analyzer 是一个专业的 MySQL 性能诊断 SKILL,通过 MCP 协议连接数据库或分析用户提供的诊断文件,提供审慎、可验证、可回滚的性能优化建议。
- 🔒 只读分析 - 不修改任何生产数据,仅执行诊断类 SQL
- 📊 证据驱动 - 每条结论绑定具体指标和证据来源
- ✅ 可验证 - 提供前后对比指标与验证 SQL
- 🔄 可回滚 - 每条建议包含回滚方案或不变更替代
- 🎯 风险分级 - 低/中/高风险明确标识,避免误操作
- 🧠 AI 增强 - Few-Shot 示例、上下文管理、多轮对话引导
| 功能 | 说明 | 优先级 |
|---|---|---|
| 版本兼容性 | MySQL 5.7/8.0 自动检测与适配 | 🔥 高 |
| Few-Shot 示例 | 3 个标准输出示例,确保格式一致 | 🔥 高 |
| 统计信息检查 | 检测统计信息时效性,避免优化器误判 | 🔥 高 |
| 上下文管理 | 自动优先分析 Top 20 大表、Top 30 慢查询 | ⚡ 中 |
| 多轮对话引导 | 主动询问是否需要详细分析、脚本生成 | ⚡ 中 |
| 锁等待关联 | 分析回表对锁等待的影响 | ⚡ 中 |
| Buffer Pool 关联 | 监控命中率与回表的关联 | ⚡ 中 |
| 执行计划稳定性 | 检测执行计划变异 | 📌 低 |
📊 性能分析
├── 连接状态检查
├── 基础性能指标(QPS、TPS、连接数、缓存命中率)
├── 慢查询分析
└── 索引使用分析
🔍 问题诊断
├── 锁等待分析
├── 配置参数检查
└── 表结构评估
🎯 回表检测(v2.1+)
├── 回表 SQL 识别
├── 覆盖索引分析
├── 回表成本量化
├── Handler 状态监控
└── 索引健康检查
📋 优化建议
├── SQL 优化(含延迟关联等高级技巧)
├── 索引优化(覆盖索引、冗余索引清理)
└── 参数调优
直接描述你的数据库问题:
"帮我检查数据库性能问题"
"分析这个慢查询:SELECT * FROM users WHERE status = 1"
"优化 orders 表的索引使用"
"检测回表问题"
"检查索引健康度"
用户:数据库响应慢,帮我检查性能瓶颈
AI:
## 性能诊断报告
### 1) 证据
- QPS: 1500(正常)
- 慢查询数量:50 条/小时(⚠️ 偏高)
- Buffer Pool 命中率:85%(⚠️ 低于 90%)
### 2) 结论
- 主要瓶颈:回表导致磁盘 I/O 增加
- 影响查询:Top 5 慢查询占总耗时的 80%
### 3) 建议(中风险)
- 创建覆盖索引:CREATE INDEX idx_user_status ON orders(user_id, status);
...(完整 6 步输出)
用户:检测 orders 表的回表问题
AI:
## 回表检测报告 - orders 表
### 1) 证据
- EXPLAIN 显示:type=ref, Extra=Using where, rows=5000
- Performance Schema: scan_return_ratio = 250
### 2) 结论
- orders 表存在严重回表,每次查询平均回表 250 次
### 3) 建议(中风险)
- 创建覆盖索引...
💡 需要我详细分析 Top 5 回表 SQL 吗?
用户:检查 users 表的索引健康度
AI:
## 索引健康检查报告 - users 表
### 1) 证据
- 表规模:1500 万行,5.2GB
- 当前索引:4 个,其中 1 个冗余
### 2) 结论
- 冗余索引:idx_email_name 包含 idx_email
- 低区分度索引:idx_name 区分度仅 2.3%
### 3) 建议(低风险)
- 删除冗余索引:ALTER TABLE users DROP INDEX idx_email_name;
💡 需要我生成删除冗余索引的完整脚本吗?
mysql-performance-analyzer/
├── README.md # 本文件
├── CHANGELOG.md # 更新日志
├── SKILL.md # 技能定义文档
├── prompts/ # 使用场景
│ ├── usage-scenarios.md # 常用分析场景
│ └── tableback-detection.md # 回表检测专项指南
└── references/ # 技术参考
├── technical-references.md # SQL 查询和技术参考
└── index-health-checks.sql # 索引健康检查 SQL 全集
所有分析结果遵循6 步输出格式:
1) 证据:来源与关键指标
2) 结论:问题与影响范围
3) 建议:低/中/高风险分级
4) 验证:对比指标 + 验证 SQL
5) 回滚:可逆方案或不变更替代
6) 实施:顺序与窗口建议
| 风险等级 | 标识 | 说明 | 执行建议 |
|---|---|---|---|
| 低风险 | ✅ | 不影响业务,可立即执行 | 直接执行 |
| 中风险 | 可能影响性能,需评估 | 业务低峰期执行 | |
| 高风险 | 🚨 | 可能影响稳定性 | 充分测试后执行 |
| 类别 | 检查项 |
|---|---|
| 基础检查 | 1. 表规模概览、2. 索引定义全览 |
| 索引优化 | 3. 冗余索引检测、4. 覆盖索引机会、5. 大表索引效率、9. 联合索引顺序、10. 索引使用统计、11. 未使用索引 |
| 回表检测 | 6. 缺失覆盖索引、7. 主键设计检查、8. 索引碎片、12. 回表成本估算、13. 表级回表风险、14. 慢查询回表分析 |
| 高级诊断 | 15. 索引优化汇总、16. 统计信息时效性、17. 统计信息准确性、18. 锁等待关联、19. Buffer Pool 命中率、20. Buffer Pool 详情、21. 执行计划稳定性 |
| 功能 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| Performance Schema | 基础支持 | 完整支持 |
| 直方图统计 | ❌ | ✅ |
| 不可见索引 | ❌ | ✅ |
| 降序索引 | ❌ | ✅ |
-
提供具体信息
- 数据库名、表名、查询 SQL
- MySQL 版本、数据量级
- 问题现象(慢/抖动/锁/超时)
-
描述变更边界
- 是否允许索引变更
- 是否允许参数调整
- 可接受的停机窗口
-
利用多轮对话
- AI 会主动询问是否需要详细分析
- 可以要求生成完整执行脚本
- 可以要求评估预期收益
| 场景 | 推荐指数 | 说明 |
|---|---|---|
| 数据库响应慢 | ⭐⭐⭐⭐⭐ | 快速定位瓶颈 |
| 慢查询优化 | ⭐⭐⭐⭐⭐ | 提供具体改写建议 |
| 索引设计评估 | ⭐⭐⭐⭐⭐ | 检测冗余和缺失 |
| 大表性能优化 | ⭐⭐⭐⭐⭐ | 延迟关联、分页优化 |
| 架构升级咨询 | ⭐⭐⭐⭐ | 主从、分库分表方案 |
| 容量规划 | ⭐⭐⭐⭐ | 容量拐点预测 |
| 文档 | 说明 |
|---|---|
| SKILL.md | 技能定义文档,了解核心功能 |
| CHANGELOG.md | 更新日志,了解版本变更 |
| prompts/usage-scenarios.md | 使用场景模板 |
| prompts/tableback-detection.md | 回表检测专项指南 |
| references/technical-references.md | 技术参考,含 Few-Shot 示例 |
| references/index-health-checks.sql | 索引健康检查 SQL 全集 |
- ✅ 只读分析 - 不修改任何生产数据
- ✅ 诊断建议 - 提供优化建议,不自动执行
- ✅ 版本支持 - MySQL 5.7+ 和 8.0+
- 先在从库执行 - 避免影响主库性能
- 业务低峰期 - 如需在主库执行,选择低峰期
- 完整备份 - 任何变更前完整备份
- 充分测试 - 测试环境验证所有变更
- 监控验证 - 实时监控变更效果
详见 CHANGELOG.md
- 🔥 新增:版本兼容性支持(5.7/8.0)
- 🔥 新增:Few-Shot 示例(3 个标准输出)
- ⚡ 新增:上下文管理策略
- ⚡ 新增:多轮对话引导
- ⚡ 新增:统计信息时效性检查
- ⚡ 新增:锁等待与回表关联分析
- ⚡ 新增:Buffer Pool 命中率关联
- 📌 新增:执行计划稳定性检查
- 🔥 新增:回表检测专项
- 🔥 新增:索引健康检查(15 项)
- ⚡ 新增:大表优化专项
欢迎提交 Issue 和 Pull Request!
- 发现 SQL 错误
- 建议新的检查项
- 优化输出格式
- 添加新的诊断 SQL
- 完善文档
- 改进 Few-Shot 示例
MIT License
如有问题,请通过以下方式联系:
- 📧 Email: [your-email@example.com]
- 💬 Issues: [GitHub Issues]
- 📖 文档:[项目 Wiki]
Made with ❤️ by DBA & AI Engineers