Skip to content

hanpf2391/DB-Doctor

Repository files navigation

DB-Doctor Logo

English | 简体中文

DB-Doctor

基于 DeepSeek/LLM 的 MySQL 数据库"自动驾驶"诊疗平台

告别慢查询,DB-Doctor 让您的数据库拥有智能医生!

Java Spring Boot LangChain4j Vue 3 License

快速开始功能特性架构设计在线演示贡献指南


项目简介

DB-Doctor 是一款基于多 AI Agent 协作的非侵入式 MySQL 慢查询智能诊疗系统。通过实时监听 MySQL 慢查询日志,利用大语言模型(DeepSeek/Ollama/通义千问等)分析根因并推送优化建议。

AI 声明:本项目在开发过程中得到了 Claude Code、Gemini、gml 等 AI 工具的辅助。作者持续学习优化中,欢迎提 Issue 和 PR!


功能演示

DB-Doctor 功能演示

演示内容

  1. 自动发现并捕获慢查询
  2. AI Agent 智能分析根因
  3. 生成优化建议和执行计划
  4. AI Token 成本监控

核心卖点

Why DB-Doctor?

  • 数据不出域:支持 Ollama + 本地 DeepSeek R1 模型,绝对安全,企业级应用首选
  • 非侵入性:无需改业务代码,无需引入 Jar 包,独立部署,对现有系统零影响
  • AI 加持:DeepSeek R1 / 通义千问 / GPT-4 多模型支持,高精准诊断
  • 多 Agent 协作:主治医生 + 推理专家 + 编码专家,深度推理解决复杂问题
  • 开箱即用:Docker 一键部署,5 分钟上手
  • 解放 DBA:从繁琐的慢查询诊断中解脱,提升 10 倍效率

为什么选择 DB-Doctor?

特性 DB-Doctor 传统方案
数据安全 支持 Ollama 本地化部署,数据不出域 需上传到云端
业务侵入 只读访问,零业务侵入 需要修改业务代码或引入 SDK
诊断效率 AI 自动分析,秒级响应 人工排查,耗时长
精准度 多 Agent 协作,深度推理 经验规则,误报率高
部署成本 Docker 一键部署,5 分钟上手 复杂配置,学习成本高

核心特性

多 AI Agent 协作机制

  • 主治医生 Agent:初步诊断,收集证据(表结构、执行计划、索引信息)
  • 推理专家 Agent:深度推理,找到根因(复杂问题升级分析)
  • 编码专家 Agent:生成优化代码(索引创建、SQL 重写)

数据不出域

  • 支持 Ollama + DeepSeek R1 本地化部署
  • 支持通义千问、OpenAI 等云端模型
  • 敏感数据自动脱敏(SQL 参数、密码等)

非侵入式设计

  • 只读访问 MySQL,零业务侵入
  • 无需修改业务代码,无需引入 Jar 包
  • 独立部署,对现有系统零影响

智能去重与聚合

  • 使用 Druid SQL 指纹计算,自动识别重复 SQL
  • Template + Sample 双表架构,避免通知轰炸
  • 增量统计,追踪性能趋势

AI 监控与成本分析

  • 完整的 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 →  主治/推理/编码  →  批量通知

快速开始

方式 1:Docker 部署(推荐)

开箱即用,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 等环境
  • 一键启动,自动配置
  • 隔离运行,不影响现有系统
  • 数据持久化,重启不丢失

方式 2:下载发布包运行

适合生产环境部署,无需编译!

Windows 用户

# 1. 下载发布包
访问:https://github.com/hanpf2391/DB-Doctor/releases

# 2. 解压并进入目录
cd DB-Doctor-v0.1.0

# 3. 双击运行启动脚本
scripts\start.bat

Linux/Mac 用户

# 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 文件,部署简单
  • 适合生产环境

方式 3:本地开发运行

环境要求

  • JDK 17+
  • Maven 3.6+
  • MySQL 5.7+ / 8.0+
  • Node.js 16+ (前端开发)

1. 克隆项目

git clone https://github.com/hanpf2391/DB-Doctor.git
cd DB-Doctor

2. 配置 MySQL 慢查询日志

方式 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';

3. 启动后端

# 方式 1:Maven 运行
mvn spring-boot:run

# 方式 2:打包后运行
mvn clean package -DskipTests
java -jar target/db-doctor-3.0.0.jar

4. 启动前端(开发模式)

cd frontend

# 安装依赖
npm install
# 或使用 pnpm
pnpm install

# 启动开发服务器
npm run dev

访问:http://localhost:5173

5. 访问 Web 界面进行配置

启动成功后,访问:http://localhost:8080

首次使用需要在 Web 界面配置

  1. 点击"配置中心" → "数据源配置"
  2. 填写 MySQL 数据库连接信息(host、port、username、password)
  3. 点击"配置 AI" → 选择 AI 模型(DeepSeek/Ollama/通义千问等)
  4. 填写 API Key 或本地模型地址
  5. 点击"测试连接"验证配置
  6. 点击"重载配置"生效

支持的热加载配置

  • 数据库连接信息(支持动态切换,无需重启)
  • AI 模型配置(支持 DeepSeek、Ollama、通义千问、OpenAI 等)
  • 通知渠道配置(邮件、钉钉、飞书、企业微信)

功能详解

1. 多 AI Agent 协作机制

DB-Doctor 采用 ReAct (Reasoning + Acting) 模式,多个 Agent 协同工作:

Agent 角色 职责 触发条件
主治医生 初级诊断 收集证据(表结构、执行计划、索引信息) 所有慢查询
推理专家 高级诊断 深度推理,找到根因 复杂问题(高频/严重/锁等待/全表扫描)
编码专家 优化实施 生成优化代码(索引创建、SQL 重写) 需要升级的问题

升级触发条件

  • 高频 SQL:24 小时内出现 > 100 次
  • 严重慢查询:平均耗时 > 3 秒
  • 锁等待问题:平均锁等待 > 0.1 秒
  • 疑似全表扫描:扫描/返回 > 1000

2. SQL 指纹去重

使用 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 = ?

3. Template + Sample 双表架构

  • Template 表:存储 SQL 模板和聚合统计(平均耗时、最大耗时、出现次数等)
  • Sample 表:存储每次捕获的具体 SQL(保留完整历史)

优势

  • 避免重复分析
  • 减少存储空间
  • 追踪性能趋势

4. 动态数据源热加载

修改数据库配置后,无需重启应用,点击"重载配置"即可生效:

// 配置热加载流程
1. 用户在 Web 界面修改配置
2. 保存到 H2 数据库 system_config 
3. DynamicDataSourceManager 检测到配置变更
4. 关闭旧数据源初始化新数据源
5. 原子引用更新线程安全

5. AI 监控与成本分析

  • 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

测试数据库

项目提供了完整的性能测试数据库脚本:

1. 初始化测试数据库

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 秒)

2. 执行慢查询测试

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!

贡献流程

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'feat: 添加某功能')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

代码规范

  • 遵循阿里巴巴 Java 开发规范
  • 禁止硬编码,所有参数从配置文件读取
  • 使用 Slf4j 日志框架,禁止 System.out.println
  • 异常必须记录日志并重新抛出
  • 所有 public 类和方法必须添加 JavaDoc

鸣谢

感谢以下开源项目和技术社区:


联系方式


许可证

本项目基于 MIT License 开源。


国际化


下载与部署

Docker Hub

  • 镜像地址hanpf23/db-doctor
  • 快速启动
    docker pull hanpf23/db-doctor:0.1.0
    docker run -d -p 8080:8080 hanpf23/db-doctor:0.1.0

GitHub Release

Made with ❤️ by hanpf

让每一个数据库都拥有智能医生


Star History

如果这个项目对你有帮助,请给我们一个 Star

Star History Chart

About

它的核心定位是:非侵入式 MySQL 慢查询智能诊疗系统。 它部署在应用服务器上,像一个 24 小时待命的 DBA,实时监听 MySQL 的 slow.log,利用 AI Agent 分析根因,并推送优化建议。

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors