记一次mysql 导致的CPU使用率过高问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次mysql 导致的CPU使用率过高问题相关的知识,希望对你有一定的参考价值。

前几天更新完程序,测试功能时,发现应用登录非常慢,以为是应用有问题,但是等待较长一段时间后发现应用登录是ok的。检查应用日志,发现提示数据池已满,无法创建更多的连接。然后赶紧登录数据库检查,

1、top查看发现mysql进程cpu使用率竟然高达1300%多,我勒个去,这是什么鬼!

技术分享


2、登录mysql查看线程

# show processlist

发现大量的从应用服务器过来的连接,而且全部是Query状态。想着看看慢查询日志有哪些SQL运行时间较长,导致连接一直保持Query状态。


3、开启慢查询日志

# show variables like "%slow%";  --查看慢查询日志是否开启

# set global slow_query_log=on;  --开启慢查询日志

技术分享


4、开启慢查询日志一段时间后查看慢查询日志

技术分享

妈呀,sql运行时间基本上都是在150s左右,这应用能快起来才真是神了。这SQL也是没谁了~

那现在咋办呢?建索引?优化sql语句?

想想优化sql语句也是远水救不了近火了,后续再对sql语句优化吧。先试试创建索引看看吧,创建索引之后发现cpu使用率降下来了,应用登录也正常了。


5、用mysql自带慢查询日志分析工具mysqldumpslow看看有哪些语句较为严重

技术分享


以上是关于记一次mysql 导致的CPU使用率过高问题的主要内容,如果未能解决你的问题,请参考以下文章

记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

Java内存CPU占用率过高

记一次redis client配置使用不当造成Proxy CPU负载过高

记一次服务器IO过高处理过程

记一次mycat服务异常排查