mysql 查询慢,cpu占用高,state sending data 问题解决
随着seaxiang.com的数据和访问量越来越多,获取数据越来越慢,有时cpu竟然100%了。
使用iotop
发现mysql的disk read很高,几十M每秒。
使用mysql的show processlist
有好几个state的状态是sending data
。
为什么会频繁出现 sending data
Sending data
状态的含义,原来这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。
这里的关键是为什么要收集数据,原因在于:如果没有走mysql的“索引”,mysql需要到“数据行”上将需要返回的数据读取出来返回个客户端。
没有索引的话会扫描全表数据,就会有很多的disk read,cpu也会上去,cpu上去后又会影响其它的curd,造成堵塞,一段时间后,cpu就会到100%,最后会导致进程卡死现象。
解决办法
给表的字段加上索引,比如seaxiang.com根据code获取博客,那么给blog表的code字段加上索引。
加上索引后,查询速度明显的快了很多,使用mysql的show processlist
也没有sending data
状态,cpu明显的降下来。
2
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦