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

2018/07 作者:ihunter 0 0


一朋友服务器CPU100%.摄影网站,理论上来说,同时在线不会过百.数据库的连接数更不可能会2000.MySQL我给的2000的链接数,居然跑满了,而且服务器也特别的卡.看来需要入手检查了.
1.第一步,万能的重启.当然可能重启了一会儿还是继续高上去
2.检查连接数和慢查询语句.开始分析了.

我们的原则是,重启能解决的,绝对不开client
cpu100%通常情况下就是有慢sql造成的,这里的慢sql包括全表扫描,扫描数据量过大,内存排序,磁盘排序,锁争用等待等...
一般表现现象sql执行状态为:Sending dataCopying to tmp tableCopying to tmp table on diskSorting resultlocked

通过show processlist查看当前正在执行的sql,当执行完show processlist后出现大量的语句,通常其状态出现Sending dataCopying to tmp tableCopying to tmp table on diskSorting resultUsing 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攻击之类的


赞(1) 更多分享

上篇: Mysql 占用cpu资源高的分析
下篇: MySQL常用命令