今天使用 MobaXterml 连接上一台物联网的Linux服务器的使用,发现该服务器的CPU使用率一直在100%左右。
使用 top 命令发现Mysql占用了大量的CPU
用数据库工具 Navicat premium 以 root 的身份连接数据库,执行查询语句:
show PROCESSLIST;
发现主要是这条查询语句导致Mysql占用CPU的资源:
于是采取以下步骤进行优化:
1.使用字段`contect_id`, `come_from`建立组合索引;
2.暂停物联网服务,使用查询语句:TRUNCATE Table c_clients ,重置了这张表。(这个命名不要随便执行,会删除所有数据,并重置表,ID会从1重新开始,我这张表只保存当前在线的客户端数据,所以无所谓)。
这使用重新查看CPU占用情况,发现已经下降到了60%左右的占用率。
继续深入优化:
1.使用查询语句:show variables like 'slow_query%',查看Mysql是否开启了慢日志,以及慢日志的存储位置;
2.得到慢日志存储位置后,在 中使用Linux命令: cat -n /usr/local/mysql/data/slow_1.log | tail -n 100,查看慢日志的最后100行记录(由于日志太大,最好不要一次性全部打开,否有有可能占满CPU和内存导致服务器死机)
利用Mysql慢日志分析,如果是select语句比较慢,那需要针对性的建立索引。如果是insert慢,可以适当的删除索引。如果是update慢,可以根据实际情况,删除或添加索引。
最后优化完,CPU回归了平静。