CPU 100%故障诊断最佳实践:DBA视角的系统层+数据库层排查路径

简介: 数据库小学妹教你快速定位MySQL CPU 100%根因:用top锁定mysqld进程,vmstat/iostat区分us/sy/wa瓶颈,SHOW PROCESSLIST揪出慢SQL与锁竞争,结合慢日志、InnoDB状态及连接风暴分析,精准避坑不重启。

📌今日关键词:CPU 100%、top、vmstat、iostat、SHOW PROCESSLIST、慢查询、InnoDB、锁竞争、连接风暴

大家好,我是数据库小学妹 👋

凌晨收到CPU 100%告警,是不是很慌?

之前有朋友问我:CPU飙满了,怎么判断是不是数据库的锅?

说实话,我第一次遇到完全懵了。只知道重启数据库。后来发现重启不管用,半小时后CPU又飙满了。

今天就聊聊,DBA遇到CPU 100%该怎么排查。

先搞清楚CPU在忙什么

CPU占满不是问题的终点。us、sy、wa才是关键线索。

us(用户态):应用在跑计算。us高,通常是SQL在做大量计算或排序。

sy(内核态):系统在忙。sy高,通常是连接风暴或锁竞争。

wa(IO等待):CPU在等磁盘。wa高,说明磁盘是瓶颈。

load average:top第一行有三个数。一分钟、五分钟、十五分钟的平均负载。负载接近或超过CPU核数,说明压力很大。

这几个指标看完,CPU 100%的原因基本就有方向了。

第一步:top看谁在吃CPU

top -c

看到CPU 100%,先看哪个进程在吃资源。

如果是mysqld,数据库本身有压力。继续往下排查。

如果是别的进程,比如Java应用,CPU高可能跟数据库无关。到这步就可以转给开发了。

关键看两个东西:哪个进程吃CPU,吃了多少。mysqld独占80%以上,基本锁定是数据库问题。

第二步:vmstat看全局趋势

vmstat 1 10

每隔1秒采样10次,观察趋势。

r列(运行队列):大于CPU核数,CPU已经不够用了。

b列(阻塞队列):大于0说明进程在等IO。

swap列的si、so:非0说明内存不够,在换入换出。

cs列(上下文切换):突然飙升,检查连接数和锁。

vmstat讲究看趋势。单次值没意义,连续看几秒才准。

第三步:iostat确认IO瓶颈

iostat -x 1

%util接近100%,磁盘快打满了。

await远大于svctm,IO在排队了。

CPU 100%有时候是假象。wa高说明瓶颈在磁盘,CPU其实在等IO。这时候加CPU没用,得解决磁盘问题。

第四步:SHOW PROCESSLIST查数据库

系统层看完,如果锁定了mysqld,就该深入数据库了。

SHOW FULL PROCESSLIST;

这一步是DBA排查的核心。看三个东西:

连接数:正常几十到几百。突然飙到几千,就是连接风暴。连接风暴会触发大量上下文切换,sy直接飙高。

正在执行的SQL:State列显示Executing的,就是正在跑的SQL。有没有跑了很久的慢SQL?

锁等待:State显示Lock wait的,说明在等锁。大量Lock wait堆积,CPU全花在锁管理上了。

连接风暴是CPU高的常见原因。应用连接池配置不当,或者故障重试机制有问题,瞬间打进来几千个连接。

第五步:慢查询找元凶

-- 看当前执行时间最长的SQL
SELECT * FROM information_schema.processlist 
WHERE command != 'Sleep' 
ORDER BY time DESC LIMIT 10;

或者直接看慢查询日志:

tail -100 /var/log/mysql/slow.log

慢查询是CPU高的最大元凶。常见情况:

全表扫描:没走索引,几百万行全扫一遍。CPU一直在做行比较。

复杂排序:ORDER BY + GROUP BY组合,临时表放不下写磁盘。CPU和IO同时飙高。

子查询嵌套:优化器选错执行计划,嵌套循环跑了上亿次。

看Rows_examined字段。扫描行数远大于返回行数,就是索引没用对。

补充:InnoDB状态看锁竞争

SHOW ENGINE INNODB STATUS\G

重点看TRANSACTIONS部分。

如果有大量lock wait,说明热点行竞争严重。比如电商场景的库存扣减、账户余额变更,大量事务抢同一行。

InnoDB行锁虽然粒度小,但热点行场景下跟表锁没区别。CPU全花在锁管理上了。

再看BUFFER POOL部分。Buffer pool hit rate低于99%,说明内存不够,频繁从磁盘读数据。这也会加重CPU负担。

排查决策树

整个过程用决策树串起来:

用top找到吃CPU的进程。不是mysqld就转开发。

是mysqld就vmstat看sy是否高。sy高查连接数。

sy正常查wa。wa高查iostat看磁盘。

wa正常查us。us高查慢查询。

慢查询正常查SHOW PROCESSLIST。有Lock wait查锁竞争。

避坑清单

  1. 不要上来就重启:重启丢现场,后面找不到根因
  2. 先保存现场:top、vmstat、SHOW PROCESSLIST结果先存下来
  3. us/sy/wa要分清:us高是计算问题,sy高是连接/锁问题,wa高是磁盘问题
  4. 连接数要监控:连接风暴是CPU高的常见元凶
  5. 看Rows_examined:扫描行数远大于返回行数,索引有问题
  6. 热点行要警惕:库存扣减、余额变更是高频锁竞争场景
  7. Buffer pool hit rate要关注:低于99%说明内存不够
  8. 慢查询日志要开:没开慢查询日志,排查就是瞎猜
  9. 不要只看平均值:一条慢SQL就能把CPU打满
  10. 完善监控:出事后第一件事是完善监控,别第二次还是懵的

这些命令看着不多,但排一次完整的故障就全记住了。

下一篇我来讲,凌晨3点从库备份锁表怎么一步步把整个系统拖垮的。真实案例,比工具命令有用多了。

我是数据库小学妹,咱们下篇见 👋

相关文章
|
4月前
|
Prometheus 运维 监控
数据库监控最佳实践:Prometheus+Grafana巡检体系搭建
讲述数据库巡检体系的搭建过程,包括巡检指标设计、Prometheus+Grafana实战、告警阈值设置、故障预测,附避坑清单
|
4月前
|
SQL 人工智能 自然语言处理
Vibe Coding 是什么?当“感觉编程”遇上数据库
Vibe Coding是2026年编程圈最火的概念之一,指开发者通过自然语言描述“感觉”或“意图”,由AI自动生成代码、调试、优化。本文从Vibe Coding的起源讲起,分析它如何改变数据库开发方式:从手写SQL到自然语言查询、从人工调索引到AI推荐、从经验运维到智能诊断。探讨这项趋势对DBA职业的影响,并给出拥抱变化的实用建议。技术会变,但人的判断力、审美和业务理解才是长期竞争力。
|
4月前
|
SQL 运维 自然语言处理
国产向量数据库有哪些?两大技术流派深度对比与选型指南
向量数据库是2026年数据库领域增长最快的细分赛道之一。本文从RAG应用和企业知识库的实际需求出发,系统梳理国产向量数据库的两大技术流派——独立向量数据库与融合型向量数据库,深入对比两者的架构差异、适用边界和选型逻辑。
|
4月前
|
SQL 算法 关系型数据库
数据库大表ALTER最佳实践:pt-osc、gh-ost原理与生产调优
数据库小学妹分享大表ALTER避坑指南:详解Instant DDL(8.0+毫秒加字段)、pt-osc(触发器同步)与gh-ost(binlog解析)三大方案,剖析MDL锁、COPY/INPLACE算法及磁盘空间陷阱,助你安全完成在线DDL变更。(239字)
|
4月前
|
存储 人工智能 多模数据库
大模型时代数据库角色转型实战:从RAG检索增强到AI Agent数据底座的架构思考
本文探讨大模型时代数据库角色的深刻转变:从数据存储转向AI底座。详解RAG如何依赖向量数据库实现知识增强,Agent如何依托数据库实现记忆持久化与上下文管理,以及多模数据库如何支撑AI Agent的工具调用与执行。DBA需扩展向量检索、多模存储等新能力,而非被替代。(239字)
|
2月前
|
缓存 监控 NoSQL
命中率98%跌至23%,17条告警齐发:Redis缓存三大故障复盘
从618促销缓存雪崩事故切入,深度解析缓存穿透、击穿、雪崩的底层机制、生产级防御方案与监控告警策略,附布隆过滤器实现和分布式锁代码
|
2月前
|
人工智能 关系型数据库 MySQL
10分钟配置MCP,让AI Agent直接查你的MySQL
从"AI Agent怎么访问数据库"这个现实问题出发,梳理Agent连库方式的演进,讲清MCP协议的原理与价值,用MySQL实战演示如何配置一个MCP Server,并给出权限、安全、审计上的注意事项与避坑清单。
|
2月前
|
SQL 人工智能 自然语言处理
上线第一周就拦下1条危险SQL:Agent连库四道防线
从团队试点AI Agent做数据问答差点出事的真实经历出发,梳理Agent连数据库与传统用户连库的本质区别,拆解提示注入、误操作、查询风暴、敏感泄露四类风险,给出最小权限只读账号、高危SQL拦截、全链路审计、速率控制四道防线的实操方案与避坑清单。
|
2月前
|
安全 关系型数据库 MySQL
切换从32秒缩到10秒,MHA到InnoDB Cluster升级复盘
从MHA停维护近十年、份额跌至12%的现实切入,完整记录从MHA一主两从升级到InnoDB Cluster的路径,含MySQL Shell建集群、Router切换、数据迁移与验证下线
|
2月前
|
存储 关系型数据库 MySQL
读写混合TPS差六倍,PostgreSQL与MySQL架构差异实测
从架构设计、索引实现、事务隔离、复制机制、运维体验五个维度深度对比PostgreSQL与MySQL,覆盖MySQL 9.0向量检索与PostgreSQL 17新特性,附权威基准数据和选型决策框架