一次mysql cpu佔用300%的排查過程記錄

某個項目反饋,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裏面的條件字段,從多列聯合索引中刪除,單獨建了個索引,佔用瞬間就下來了。

參考地址:如何找出Mysql中CPU佔用高的查詢 - 簡書 (jianshu.com)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章