我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/7. 数据库性能问题怎么排查

7. 数据库性能问题怎么排查

数据库是性能测试中最常见的瓶颈之一。很多系统应用服务器资源还没打满,响应时间却明显升高,背后往往是慢 SQL、索引缺失、连接池不足、锁等待、数据量过大或数据库 IO 压力。测试人员不一定要像 DBA 一样精通所有数据库内核,但必须能从性能测试角度发现数据库问题,并推动开发或 DBA 定位优化。

面试中问数据库性能问题,重点是看你是否能从现象到 SQL、索引、连接、锁和资源指标逐步排查。

一、数据库性能问题常见现象

常见表现:

  • 接口响应时间升高;
  • TPS 上不去;
  • 应用线程等待;
  • 数据库 CPU 高;
  • 数据库 IO 高;
  • 慢 SQL 增多;
  • 连接数打满;
  • 锁等待;
  • 死锁;
  • 主从延迟;
  • 分页查询很慢。

出现这些现象,要考虑数据库瓶颈。

二、先看慢 SQL

慢 SQL 是最常见问题。

排查点:

  • SQL 执行时间;
  • 执行频率;
  • 是否全表扫描;
  • 是否走索引;
  • 返回数据量;
  • 排序和分组;
  • join 是否合理;
  • 分页是否深分页。

慢 SQL 不是只看单次慢,还要看高频 SQL。一个 SQL 单次 50ms,但每秒执行几千次,也可能造成压力。

三、看执行计划

通过 explain 看 SQL 是否走索引。

关注:

  • type;
  • key;
  • rows;
  • Extra;
  • 是否 Using filesort;
  • 是否 Using temporary。

如果 rows 很大、没有 key、出现全表扫描,就要重点关注。

四、索引问题

常见索引问题:

  • 查询字段无索引;
  • 联合索引顺序不合理;
  • 条件使用函数导致索引失效;
  • like 前置百分号;
  • 隐式类型转换;
  • 查询条件选择性差;
  • order by 未命中索引。

测试人员可以发现现象并提供 SQL、参数、数据量和执行时间。

五、连接池问题

数据库连接池不足会导致请求排队。

表现:

  • 应用 CPU 不高;
  • 响应时间升高;
  • 日志出现等待连接;
  • 连接池 active 打满;
  • 数据库连接数接近上限。

要看应用连接池配置和数据库最大连接数。

六、锁等待问题

高并发写入或更新时容易出现锁等待。

场景:

  • 扣库存;
  • 更新订单状态;
  • 抢券;
  • 账户余额扣减;
  • 批量更新。

表现:

  • 响应时间突然变长;
  • TPS 不稳定;
  • 数据库锁等待增加;
  • 甚至死锁。

七、深分页问题

分页查询页码很大时,可能越来越慢。

例如:

select * from orders order by create_time desc limit 100000, 20;

数据库需要扫描并跳过大量数据。

优化思路通常是基于游标或上次最大 ID 做分页。

八、数据库资源指标

需要关注:

  • CPU;
  • 内存;
  • 磁盘 IO;
  • IOPS;
  • buffer pool 命中率;
  • 连接数;
  • 慢查询数;
  • 锁等待;
  • 主从延迟。

数据库问题不能只看 SQL,也要看整体资源。

九、排查案例

现象:订单查询接口压测时,100 并发响应时间 200ms,500 并发时 95 线超过 5s。

排查:

  1. 应用 CPU 不高;
  2. 日志显示订单查询耗时高;
  3. 数据库慢 SQL 发现 order by create_time desc 的查询;
  4. explain 发现未走索引;
  5. 增加联合索引后复测,95 线明显下降。

这类案例很适合面试表达。

十、面试回答模板

如果面试官问“数据库性能问题怎么排查”,可以这样回答:

数据库性能问题我会先从现象入手,比如接口响应时间升高、TPS 上不去、应用 CPU 不高但请求变慢。然后查看数据库慢 SQL 和执行频率,通过 explain 看是否走索引、扫描行数、是否有 Using filesort 或临时表。接着检查索引是否合理,是否存在函数、隐式转换、like 前置百分号导致索引失效。同时关注连接池是否打满、数据库连接数、锁等待、死锁、磁盘 IO 和主从延迟。如果是分页或排序接口,还会关注深分页和 order by。定位后让开发或 DBA 优化 SQL、索引或连接池配置,并通过复测验证效果。

十一、练习清单

  1. 找慢 SQL;
  2. 看 explain;
  3. 判断是否走索引;
  4. 分析连接池;
  5. 分析锁等待;
  6. 分析深分页;
  7. 看数据库 CPU;
  8. 看磁盘 IO;
  9. 写数据库瓶颈案例;
  10. 准备面试回答。

数据库性能排查的核心是 SQL、索引、连接、锁和资源指标。测试人员要能发现问题、提供证据、推动优化和复测。

配套刷题: