场景描述:使用top命令发现mysql占用cpu利用率非常高
解决方法
1、show full processlist;
发现存在大量sleep线程;而大量sleep线程会占用连接数,当超过max_connections后无法建立新连接、并且可能仍有一些内存未释放,数量太多的话,是会消耗大量无谓的内存的,从而影响性能;
// 设置最大连接数以及最长等待时间 (注这部分配置可以在代码里也可以在mysql配置文件里)
SHOW VARIABLES LIKE 'max_connections';
SET GLOBAL max_connections=5000;
show global variables like 'wait_timeout'
SET GLOBAL wait_timeout=6000;
2、发现有些sql一直在执行,虽然执行时间很短
需要在代码中定位到该SQL语句,使用explain 关键字对其分析,看是否是索引失效了;后续再看如何优化SQL
https://www.cnblogs.com/ReturnOfTheKing/p/17843900.html
3、慢查询SQL日志
// 检查是否开启了慢查询
show variables like '%slow_query_log%'
set GLOBAL slow_query_log = ON/OFF
如何后台程序使用了druid数据源,也可以通过后台可视化界面更直观查看
参考文章:
【1】https://blog.csdn.net/vip_linux/article/details/9209485
【2】https://blog.csdn.net/qq_43493747/article/details/121577734