某個項目反饋,cpu一直佔用300%不降下來,馬上遠程排查。記錄下排查過程。
1、查詢mysql 進程id,直接top 查看。果然一直都降不下來。
2、檢查mysql服務是否正常,發現查詢什麼都挺正常的。懷疑是某個sql導致的。
3、根據進程id找mysql下的線程,看cpu佔用很高的那幾個。top -H -p 123
4、根據線程id到數據庫查詢信息。
SELECT * FROM `performance_schema`.threads T WHERE T.THREAD_OS_ID = id
在查詢結果中有個字段PROCESLIST_INFO,裏面就是執行的sql。
5、把sql拿出來看,發現只是一個簡單的單表查詢,根據某個字符串查結果,爲什麼會消耗這麼高呢?打開索引就發現了,不知道是誰,建了個多列聯合索引。
6、把上述sql裏面的條件字段,從多列聯合索引中刪除,單獨建了個索引,佔用瞬間就下來了。