DB-Doctor 是一款基于多 AI Agent 协作的非侵入式 MySQL 慢查询智能诊疗系统。通过实时监听 MySQL 慢查询日志,利用大语言模型(DeepSeek/Ollama/通义千问等)分析根因并推送优化建议。
AI 声明:本项目在开发过程中得到了 Claude Code、Gemini、gml 等 AI 工具的辅助。作者持续学习优化中,欢迎提 Issue 和 PR!
演示内容:
- 自动发现并捕获慢查询
- AI Agent 智能分析根因
- 生成优化建议和执行计划
- AI Token 成本监控
- 数据不出域:支持 Ollama + 本地 DeepSeek R1 模型,绝对安全,企业级应用首选
- 非侵入性:无需改业务代码,无需引入 Jar 包,独立部署,对现有系统零影响
- AI 加持:DeepSeek R1 / 通义千问 / GPT-4 多模型支持,高精准诊断
- 多 Agent 协作:主治医生 + 推理专家 + 编码专家,深度推理解决复杂问题
- 开箱即用:Docker 一键部署,5 分钟上手
- 解放 DBA:从繁琐的慢查询诊断中解脱,提升 10 倍效率
| 特性 | DB-Doctor | 传统方案 |
|---|---|---|
| 数据安全 | 支持 Ollama 本地化部署,数据不出域 | 需上传到云端 |
| 业务侵入 | 只读访问,零业务侵入 | 需要修改业务代码或引入 SDK |
| 诊断效率 | AI 自动分析,秒级响应 | 人工排查,耗时长 |
| 精准度 | 多 Agent 协作,深度推理 | 经验规则,误报率高 |
| 部署成本 | Docker 一键部署,5 分钟上手 | 复杂配置,学习成本高 |
- 主治医生 Agent:初步诊断,收集证据(表结构、执行计划、索引信息)
- 推理专家 Agent:深度推理,找到根因(复杂问题升级分析)
- 编码专家 Agent:生成优化代码(索引创建、SQL 重写)
- 支持 Ollama + DeepSeek R1 本地化部署
- 支持通义千问、OpenAI 等云端模型
- 敏感数据自动脱敏(SQL 参数、密码等)
- 只读访问 MySQL,零业务侵入
- 无需修改业务代码,无需引入 Jar 包
- 独立部署,对现有系统零影响
- 使用 Druid SQL 指纹计算,自动识别重复 SQL
- Template + Sample 双表架构,避免通知轰炸
- 增量统计,追踪性能趋势
- 完整的 Token 统计(输入/输出/总成本)
- 多模型成本分析(DeepSeek、GPT-4、通义千问等)
- 单次分析追踪(traceId 关联完整分析链路)
- 错误分类与熔断保护
- 邮件通知(SMTP)
- 钉钉机器人(Webhook + 签名验证)
- 飞书机器人(Webhook)
- 企业微信(Webhook)
当前版本:v0.1.0(2026 年 2 月发布)
最新动态:
- v0.1.0 - 首次正式发布,支持 Docker 部署和发布包下载
- 多 AI Agent 协作 - 主治医生、推理专家、编码专家
- SQL 指纹去重 - Template + Sample 双表架构
- 多渠道通知 - 邮件、钉钉、飞书、企业微信
- 配置热加载 - 动态数据源 + AI 模型切换
即将发布:
- v0.2.0 - 报告导出(PDF/Word)- 开发中
- v0.3.0 - 自定义通知规则 - 计划中
- v1.0.0 - 多租户支持(监控多个 MySQL 实例)- 规划中
项目处于活跃开发阶段,代码持续更新中。更多迭代进度请阅读 CHANGELOG.md
DB-Doctor 系统架构
├────────────────┐ ┌────────────────┐ ┌────────────────┐
│ Vue 3 前端 │ │ Spring Boot │ │ AI Agents │
│ │◄──►│ 后端 │◄──►│ (LangChain4j) │
│ - Dashboard │ │ │ │ │
│ - 报告列表 │ │ - REST API │ │ - 主治医生 │
│ - AI 监控 │ │ - 定时任务 │ │ - 推理专家 │
│ - 配置中心 │ │ - 异步处理 │ │ - 编码专家 │
└────────────────┘ └────────────────┘ └────────────────┘
│
┌───────────┴───────────┐
│ │
┌───────▼────────┐ ┌───────▼────────┐
│ H2 数据库 │ │ MySQL 目标库 │
│ (内部数据) │ │ (只读访问) │
│ │ │ │
│ - Template 表 │ │ - slow_log │
│ - Sample 表 │ │ - information │
│ - AI 调用日志 │ │ _schema │
│ - 系统配置 │ │ │
└────────────────┘ └────────────────┘
慢查询处理完整流程
1. 数据采集 → 2. 数据处理 → 3. AI 分析 → 4. 通知判断 → 5. 批量通知
轮询 mysql.slow_log → SQL 指纹去重 → 多 Agent 协作 → 智能策略 → 定时发送
(每 5 秒检查) → Template+Sample → 主治/推理/编码 → 批量通知
开箱即用,5 分钟上手!
# 1. 拉取镜像
docker pull hanpf23/db-doctor:0.1.0
# 2. 运行容器
docker run -d \
--name db-doctor \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
hanpf23/db-doctor:0.1.0
# 3. 访问 Web 界面
open http://localhost:8080或使用 docker-compose:
# 1. 下载 docker-compose.yml
wget https://raw.githubusercontent.com/hanpf2391/DB-Head/main/docker-compose.yml
# 2. 启动
docker-compose up -d
# 3. 查看日志
docker-compose logs -f优势:
- 无需安装 Java、Maven 等环境
- 一键启动,自动配置
- 隔离运行,不影响现有系统
- 数据持久化,重启不丢失
适合生产环境部署,无需编译!
# 1. 下载发布包
访问:https://github.com/hanpf2391/DB-Doctor/releases
# 2. 解压并进入目录
cd DB-Doctor-v0.1.0
# 3. 双击运行启动脚本
scripts\start.bat# 1. 下载发布包
wget https://github.com/hanpf2391/DB-Doctor/releases/download/v0.1.0/db-doctor.jar
# 2. 运行
java -jar db-doctor.jar
# 或使用启动脚本
chmod +x scripts/start.sh
./scripts/start.sh优势:
- 无需安装 Maven、Node.js
- 开箱即用,包含前后端
- 单个 JAR 文件,部署简单
- 适合生产环境
- JDK 17+
- Maven 3.6+
- MySQL 5.7+ / 8.0+
- Node.js 16+ (前端开发)
git clone https://github.com/hanpf2391/DB-Doctor.git
cd DB-Doctor方式 1:自动检查(推荐)
DB-Doctor 启动时会自动检查 MySQL 配置,并给出修复建议。
方式 2:手动配置
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_output = 'TABLE';
SET GLOBAL long_query_time = 2.0;
-- 验证配置
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';# 方式 1:Maven 运行
mvn spring-boot:run
# 方式 2:打包后运行
mvn clean package -DskipTests
java -jar target/db-doctor-3.0.0.jarcd frontend
# 安装依赖
npm install
# 或使用 pnpm
pnpm install
# 启动开发服务器
npm run dev启动成功后,访问:http://localhost:8080
首次使用需要在 Web 界面配置:
- 点击"配置中心" → "数据源配置"
- 填写 MySQL 数据库连接信息(host、port、username、password)
- 点击"配置 AI" → 选择 AI 模型(DeepSeek/Ollama/通义千问等)
- 填写 API Key 或本地模型地址
- 点击"测试连接"验证配置
- 点击"重载配置"生效
支持的热加载配置:
- 数据库连接信息(支持动态切换,无需重启)
- AI 模型配置(支持 DeepSeek、Ollama、通义千问、OpenAI 等)
- 通知渠道配置(邮件、钉钉、飞书、企业微信)
DB-Doctor 采用 ReAct (Reasoning + Acting) 模式,多个 Agent 协同工作:
| Agent | 角色 | 职责 | 触发条件 |
|---|---|---|---|
| 主治医生 | 初级诊断 | 收集证据(表结构、执行计划、索引信息) | 所有慢查询 |
| 推理专家 | 高级诊断 | 深度推理,找到根因 | 复杂问题(高频/严重/锁等待/全表扫描) |
| 编码专家 | 优化实施 | 生成优化代码(索引创建、SQL 重写) | 需要升级的问题 |
升级触发条件:
- 高频 SQL:24 小时内出现 > 100 次
- 严重慢查询:平均耗时 > 3 秒
- 锁等待问题:平均锁等待 > 0.1 秒
- 疑似全表扫描:扫描/返回 > 1000
使用 Druid SQL 解析器计算 SQL 指纹(MD5),自动识别参数化 SQL 模板:
// 示例:以下 SQL 会被识别为同一个指纹
SELECT * FROM users WHERE id = 1;
SELECT * FROM users WHERE id = 2;
SELECT * FROM users WHERE id = 100;
// SQL 指纹:md5("SELECT * FROM users WHERE id = ?")
// SQL 模板:SELECT * FROM users WHERE id = ?- Template 表:存储 SQL 模板和聚合统计(平均耗时、最大耗时、出现次数等)
- Sample 表:存储每次捕获的具体 SQL(保留完整历史)
优势:
- 避免重复分析
- 减少存储空间
- 追踪性能趋势
修改数据库配置后,无需重启应用,点击"重载配置"即可生效:
// 配置热加载流程
1. 用户在 Web 界面修改配置
2. 保存到 H2 数据库 system_config 表
3. DynamicDataSourceManager 检测到配置变更
4. 关闭旧数据源,初始化新数据源
5. 原子引用更新(线程安全)- Token 统计:输入/输出/总 Token 数量
- 成本分析:按模型和 Agent 分类统计成本
- 错误分类:BLOCKING(阻塞)、TRANSIENT(瞬态)、PERMANENT(永久)
- 熔断保护:连续失败 N 次后自动熔断,避免浪费 Token
[慢查询告警] 数据库性能异常
SQL 语句:
SELECT * FROM users WHERE username LIKE '%1234%'
性能指标:
- 查询耗时:3.5 秒
- 锁等待时间:0.01 秒
- 扫描行数:10000 行
- 返回行数:5 行
AI 分析:
1. 问题根因:使用了前导模糊查询(LIKE '%...%'),导致全表扫描
2. 优化建议:
- 避免使用前导通配符,改为 LIKE '1234%'
- 考虑添加全文索引
- 使用 Elasticsearch 等搜索引擎
统计信息:
- 出现次数:第 1 次
- 平均耗时:3.5 秒
- 最大耗时:3.5 秒
| 组件 | 技术选型 | 版本 |
|---|---|---|
| 后端框架 | Spring Boot | 3.2.2 |
| Java 版本 | OpenJDK | 17 |
| AI 框架 | LangChain4j | 0.36.1 |
| 数据库 | H2(内部) + MySQL(目标) | - |
| 前端框架 | Vue 3 + Element Plus | 3.x |
| SQL 解析 | Druid | 1.2.20 |
| 工具库 | Hutool, FastJSON2 | 5.8.27, 2.0.47 |
项目提供了完整的性能测试数据库脚本:
mysql -u root -p < src/main/resources/test-db-setup.sql包含内容:
- 7 张表(users、products、orders、order_items、categories、user_behavior_logs、payments)
- 37 万+ 条测试数据
- 覆盖各种字段类型
- 自动配置慢查询阈值(0.5 秒)
mysql -u root -p test_db < src/main/resources/靶数据库.sql包含 20 种测试场景:
- 全表扫描
- 模糊查询(LIKE %...%)
- 深度分页
- 复杂 JOIN
- 子查询
- 聚合查询
- 排序查询
- 无索引字段查询
- 等...
- v1.0.0 - 基础慢查询监控 + AI 分析功能
- v2.0.0 - 动态环境感知 + SQL 指纹去重
- v3.0.0 - 动态数据源 + 配置热加载
- v3.1.0 - 通知功能完善(邮件、钉钉、飞书、企业微信)
- v3.2.0 - 报告导出(PDF/Word)
- 生成 PDF 格式诊断报告
- 生成 Word 格式优化方案
- 支持批量导出
-
v3.3.0 - 自定义通知规则
- 基于严重程度的智能通知
- 基于时间段的通知策略
- 多渠道通知编排
-
v4.0.0 - 多租户支持
- 监控多个 MySQL 实例
- 租户隔离与权限管理
- 跨实例性能分析
-
v4.1.0 - PostgreSQL 支持
-
v4.2.0 - 分布式部署(消息队列解耦)
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'feat: 添加某功能') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
- 遵循阿里巴巴 Java 开发规范
- 禁止硬编码,所有参数从配置文件读取
- 使用 Slf4j 日志框架,禁止 System.out.println
- 异常必须记录日志并重新抛出
- 所有 public 类和方法必须添加 JavaDoc
感谢以下开源项目和技术社区:
- DeepSeek - 开源大语言模型
- Ollama - 本地模型运行工具
- LangChain4j - Java AI 框架
- Spring Boot - Java 开发框架
- Vue 3 - 渐进式前端框架
- Element Plus - Vue 3 组件库
- Druid - SQL 解析器
- 作者:hanpf
- 邮箱:2391303768@qq.com
- GitHub:https://github.com/hanpf2391/DB-Doctor
- Gitee:https://gitee.com/hanpf2391/DB-Doctor
本项目基于 MIT License 开源。
- 镜像地址:hanpf23/db-doctor
- 快速启动:
docker pull hanpf23/db-doctor:0.1.0 docker run -d -p 8080:8080 hanpf23/db-doctor:0.1.0
- 发布地址:DB-Doctor Releases
- 文件下载:
- db-doctor.jar (推荐生产环境)
- db-doctor.jar.sha256 (校验文件)
Made with ❤️ by hanpf
让每一个数据库都拥有智能医生
如果这个项目对你有帮助,请给我们一个 Star

