一号优惠经验分享网
51福利网的各种薅羊毛福利经验笔记

mysql占用CPU超过100%解决过程

有网站无法访问,立即登录服务器进行排查。

一、使用top命令看到的情况如下:

51福利网
top

可以看到服务器负载很高,,mysql CPU使用已达到接近400%(因为是四核,所以会有超过100%的情况)。

二、在服务器上执行mysql -u root -p之后,输入show full processlist; 可以看到正在执行的语句。

mysql -u root -p
show full processlist; 

可以看到是下面的SQL语句执行耗费了较长时间。
SELECT id,title,most_top,view_count,posttime FROM article
where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17)
order by most_top desc,posttime desc limit 0,8
但是从数据库设计方面来说,该做的索引都已经做了,SQL语句似乎没有优化的空间。
直接执行此条SQL,发现速度很慢,需要1-6秒的时间(跟mysql正在并发执行的查询有关,如果没有并发的,需要1秒多)。如果把排序依据改为一个,则查询时间可以缩短至0.01秒(most_top)或者0.001秒(posttime)。

三、修改mysql配置文件中的pool/buffer等数值,重启mysql都没有作用。

四、通过EXPLAIN分析SQL语句
EXPLAIN SELECT id,title,most_top,view_count,posttime FROM article
where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17)
order by most_top desc,posttime desc limit 0,8

可以看到,主select对27928条记录使用filesort进行了排序,这是造成查询速度慢的原因。然后8个并发的查询使CPU专用很高。

可以看到,主select对27928条记录使用filesort进行了排序,这是造成查询速度慢的原因。然后8个并发的查询使CPU专用很高。

五、优化
首先是缩减查询范围
SELECT id,title,most_top,view_count,posttime FROM article
where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17) and DATEDIFF(NOW(),posttime)<=90 order by most_top desc,posttime desc limit 0,8 发现有一定效果,但效果不明显,原因是每条记录都要做一次DATEDIFF运算。后改为 SELECT id,title,most_top,view_count,posttime FROM article where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17) and postime>=’2017-09-05′
order by most_top desc,posttime desc limit 0,8
查询速度大幅提高。在PHP中,日期阈值通过计算得到
$d = date(“Y-m-d”, strtotime(‘-90 day’));
$sql = “
SELECT id,title,most_top,view_count,posttime FROM article
where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17) and postime>=’$d’
order by most_top desc,posttime desc limit 0,8

六、效果

查询时间大幅度缩短,CPU负载很轻

打赏
一号优惠 · 51福利网薅羊毛福利具有时效性,如已失效,请留言
文章名称:《mysql占用CPU超过100%解决过程》-一号优惠 · 51福利网
免责申明:本站所有活动信息均来自网络,如有失效,不实或侵权,请联系我们删除。谢谢

评论 抢沙发

一号优惠经验分享网最新最全薅羊毛,现金红包线报网

一号优惠经验分享网提供每日最新内部优惠,薅羊毛活动,现金红包领取,免费福利和网赚福利手机赚钱线报,打造中国最受欢迎的网赚信息发布平台!51福利网

51联盟线报群赚钱·合作·帮助

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册