MySQL CPU过高的常见原因有以下几点
业务连接过多,并发太高
系统环境配置不合理
SQL语句效率低、不合理
硬件问题
鉴于以上几点常见问题,我们可以通过合适的手段来进行排查,来确认故障原因
1.先从系统层面进行排查
可以使用top命令来查看mysq的进程来确认mysql是都CPU占用过高
通过top命令可以查看到CPU使用率高的mysql进程的PID,然后可以通过PID来查看具体的线程情况,命令是
top -H -p <PID>
通过此命令可以查看到CPU使用异常的线程
也可以通过pidstat命令来查看
pidstat -t -p <PID> 1 5
也可以直接通过proc下命令的status文件查看具体线程情况
cat /proc/<PID>/status | grep Threads
通过free命令来查看系统的内存使用情况
2.从mysql中进行排查
可以使用show full processlist;命令查看当前连接是否有异常
也可以使用以下命令
select * from information_schema.processlist;
参数说明:
id:标识位,MySQL 进程 ID,使用 kill id,可以杀掉某一个进程 user:当前连接的用户 host:当前连接的主机 db:连接的数据库 command:执行的数据库操作类型 sleep:休眠状态 Query:查询状态 connect:连接状态 time:已经执行的时间,单位秒 info:已经执行的 SQL state:SQL 执行的状态,结果是 SQL 语句整个执行状态中的一个,其中包含很多状态
除了以上排除方法,我们还可以看看我之前的笔记,例如打开mysql日志,慢查询等方法进行排查,然后根据sql语句排除故障
3.从系统层面排查硬件故障
主要可以使用lspci和dmesg命令查看硬件是否有问题