外观
Mysql占用CPU高的解决方案
问题表现
服务器系统负载高,CPU 长时间接近 100%,通过 top 命令查看得知 mysqld 占用极高,问题锁定 mysql。通常是由于 SQL 语句优化不到位造成的。
可以通过以下两种方法进行排查和解决
1、通过使用开启并查看慢查询日志解决问题。
2、通过使用 show processlist;命令解决问题。
方法一、通过使用开启并查看慢查询日志解决问题
1、登录 mysql
mysql -u root -p
然后输入密码,即可登录 mysql,从而在提示符下输入命令
2、查看慢查询 SQL 是否启用
show variables like 'log_slow_queries';
如果结果为 ON 则是开启了,如果为 OFF 则表示禁用了。
3、开启慢查询命令
set global log_slow_queries = on;
因开启后当出现慢 SQL 后会自动记录在日志中,故而日志文件会越来越大,故建议非调试时关闭此功能。
4、查看慢查询存放日志
show variables like 'slow_query_log_file';
显示日志存在位置,即可去相应目录下查看。
方法二、通过使用 show processlist;命令解决问题
1、登录 mysql
mysql -u root -p
然后输入密码,即可登录 mysql,从而在提示符下输入命令
2、输入 show processlist;命令
show processlist;命令可以查看当前正在执行的线程
show processlist;
命令返回的具体参数比较多,具体含义请自行百度。这里主要注意 state 字段中如果包含大量的 Sending data、Waiting for tabls、或各种 lock(锁),大概率就是因为这些 SQL 造成的数据库拥堵。
解决办法自然是优化对应的 SQL,如希望更进一步,则需要开启查看慢查询日志。