今天使用 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回歸了平靜。

