跳至主要內容

“五一”特辑:新老系统切换上线中的数据库监控与优化实践(一)

悟空约 1772 字大约 6 分钟...

一、背景

今年"五一"假期,我们团队完成了一个关键里程碑——老系统向新系统的首次切换上线。本次上线涉及以下核心挑战:

  • 数据双向同步:为保障业务连续性,新老系统之间需保持数据实时双向同步;
  • 新老数据兼容:两套系统数据结构存在差异,需确保数据格式兼容、不丢失;
  • 高并发压力:切换期间 QPS 峰值突破 10,000,对数据库稳定性构成严峻考验。

为确保上线平稳,我们引入 DBDoctor 对数据库进行全链路性能监控与诊断优化。本文将分享这一实践过程。


二、DBDoctor 简介

DBDoctor 是一款内核级数据库性能诊断工具,能够对数据库进行细粒度扫描,帮助用户在分钟级时间内定位性能瓶颈,实现诊断效率的百倍提升。

针对传统数据库性能诊断门槛高、耗时久的问题,DBDoctor 提供了快速易用的解决方案。它深入数据库内核,基于实时海量数据分析,输出精准的诊断结论与优化建议。

img
img

2.1 产品理念

  • 基于数学量化模型:重新定义数据库性能可观测性,打破传统依赖经验、规则与阈值的诊断方式,实现单条 SQL 的资源消耗精确量化。
  • 可视化资源映射:将资源消耗映射为颜色面积,完成从"经验驱动"到"数据驱动"的转变,1 分钟内精准定位问题 SQL。
  • 主动式性能预警:通过数学算法自动发现潜在性能隐患,主动提示风险并给出优化建议。

三、DBDoctor 部署

3.1 下载与安装

DBDoctor 提供多平台安装包,下载后按指引完成安装即可。

image-20260430200441466
image-20260430200441466

3.2 Mac 环境安装

在 macOS 上安装 DBDoctor 时,需先解除 Gatekeeper 限制:

sudo spctl --master-disable

随后进入 系统设置 → 隐私与安全性,信任 DBDoctor 安装包。

双击 .pkg 安装包完成安装,浏览器将自动打开安装完成提示页面(静态 HTML 文件):

file:///private/tmp/dbdoctor_completion.html

提示页面展示了 DBDoctor 版本、安装路径、访问地址及卸载说明等信息。

安装完成后,使用邮箱登录即可进入系统(公司名可任意填写)。


四、DBDoctor 实战:系统切换上线监控

4.1 实例接入与诊断

登录后进入 实例列表 页面:

DBDoctor 默认预置了多个数据库实例,便于用户快速体验。点击 实例诊断 即可进入该实例的详细诊断页面。

4.2 性能洞察

在系统切换高峰期,新老系统双向同步导致数据库负载激增,我们通过 性能洞察 模块实时监控:

关键监控维度

  • 时间范围:支持最近 1 小时等粒度,可开启自动刷新。
  • Average Active Session (AAS):按资源类型拆解负载,包括:
    CPU | DDL | IO | LOCK | MEM | NET | Other
    
  • Max vCPUs 水位线:细粒度展示各阶段耗时分布,如:
    executing | waiting for handler commit | Opening tables | statistics
    Sending to client | preparing | optimizing | closing tables
    freeing items | updating | starting | System lock | ...
    

由于新老系统双向同步,数据读写量叠加,QPS 峰值超过 10,000,对数据库构成了显著压力。

SQL 关联分析

可查看具体 SQL 语句及其 AAS 负载占比,快速识别高消耗查询。

业务请求分布

按数据库访问账号或应用主机 IP 进行负载归因分析,便于区分老系统与新系统的请求来源。


4.3 根因诊断

DBDoctor 自动识别并诊断问题 SQL:

20062731b228ec42e31d4990ab902d19
20062731b228ec42e31d4990ab902d19

问题现象

问题类型描述
长事务业务代码执行至该 SQL 时,执行时间超过 98 秒。疑似索引设置不合理导致慢查询,存在锁表(阻塞 DDL 变更)、CPU 与 IO 打满的风险。

修复建议

优先级建议
长事务优化优化事务中的慢 SQL,或将大事务拆分为更小的事务,以缩短锁持有时间,避免业务卡顿。若已发生卡顿,可紧急 Kill 会话快速恢复。
SQL 语法与性能共发现严重问题 2 项、警告 7 项、危险操作 0 项,可点击查看详情。

4.4 慢 SQL 治理

c65126d80c14206cb8bf59430545f3bb
c65126d80c14206cb8bf59430545f3bb

有很多慢 SQL 需要调整。

慢 SQL 趋势

慢查询与多维度监控组合视图,直观呈现性能波动。

慢 SQL 耗时分布

1–3s、3–5s、5–10s、10s 以上 四个维度统计慢查询分布,支持下钻查看具体 SQL 列表。

慢 SQL 列表与 SQL 指纹

DBDoctor 将同类 SQL 去参归类,生成唯一的 SQL 指纹。例如:

-- 原始 SQL
select * from table where id=1;
select * from table where id=2;

-- SQL 指纹
select * from table where id=?;

SQL 深度分析

选中某条慢查询后,可查看其实时执行计划、索引推荐、分析结果及问题根因:

诊断结论

  1. 索引缺失:当前表索引无法满足查询需求,执行成本(cost)高达 27,068.3。建议在 progress 表新增索引:
    ALTER TABLE progress ADD INDEX dbdoctor_idx__project_id(`project_id`),
    ALGORITHM=INPLACE, LOCK=NONE;
    
    优化后 cost 从 27,068.3 降至 1.1,性能提升约 246 万倍
  2. 扫描行数过大progress 表存在部分请求范围过大或数据倾斜,导致全表扫描行数过高。
  3. 索引使用建议WHERE 条件中应优先使用主键列或索引列,以确保查询能够命中索引。

五、存储分析

5.1 磁盘利用率

当前未检测到异常。

5.2 库表空间概况

维度观测结果
TOP5 表空间占用单表接近 6 GB
TOP5 库空间占用单库接近 20 GB

六、索引推荐

索引推荐模块涵盖 优化信息概览、优化详情、低效索引检测 三大功能:

6.1 优化信息概览

系统检测到 7 个库表 存在索引优化空间,并给出了可直接执行的 DDL 修复语句,同时附带详细的索引推荐逻辑与推导过程。


七、总结

在本次老系统首次切换上线的关键任务中,DBDoctor 帮助我们实现了:

  • 实时监控:在双向同步、QPS 过万的复杂场景下,提供全链路性能洞察;
  • 精准诊断:分钟级定位长事务、慢 SQL 等核心瓶颈,保障新老系统兼容切换;
  • 高效优化:通过索引推荐与 SQL 分析,将关键查询成本降低 99.99% 以上。

对于需要保障数据库稳定性、提升诊断效率的团队而言,DBDoctor 是一款值得尝试的内核级性能诊断工具。

评论
  • 按正序
  • 按倒序
  • 按热度