MySQL服务器CPU跑满100%的情况分析

发布时间:2018-01-10 09:38:33编辑:丝画阁阅读(675)

一朋友服务器CPU100%.摄影网站,理论上来说,同时在线不会过百.数据库的连接数更不可能会2000.MySQL我给的2000的链接数,居然跑满了,而且服务器也特别的卡.看来需要入手检查了.

1.第一步,万能的重启.当然可能重启了一会儿还是继续高上去

2.检查连接数和慢查询语句.开始分析了.

我们的原则是,重启能解决的,绝对不开client

cpu100%通常情况下就是有慢sql造成的,这里的慢sql包括全表扫描,扫描数据量过大,内存排序,磁盘排序,锁争用等待等...

一般表现现象sql执行状态为:Sending data,Copying to tmp table,Copying to tmp table on disk,Sorting result,locked

通过show processlist查看当前正在执行的sql,当执行完show processlist后出现大量的语句,通常其状态出现Sending data,Copying to tmp table,Copying to tmp table on disk,Sorting result, Using filesort都是sql有性能问题

可以用explain查看sql执行效率,分析索引

解决方案整理

1.Sending data表示:sql正在从表中查询数据,如果查询条件没有适当的索引,则会导致sql执行时间过长;

2.Copying to tmp table on disk:出现这种状态,通常情况下是由于临时结果集太大,超过了数据库规定的临时内存大小,需要拷贝临时结果集到磁盘上,这个时候需要用户对sql进行优化;

3.Sorting result, Using filesort:出现这种状态,表示sql正在执行排序操作,排序操作都会引起较多的cpu消耗,通常的优化方法会添加适当的索引来消除排序,或者缩小排序的结果集;

4.出现sending data的情况:这种一般就是SQL不规范,优化SQL吧.

5.检查网站是不是有被CC攻击之类的


关键字