MySQL案例:一次單核CPU佔用太高問題的處理

客戶現場反饋,top的檢查結果中,一個CPU的佔用一直是100%。實際上現場有4個CPU,並且這個服務器是mysql專屬服務器。

個人第一反應是io_thread一類的參數設置有問題,檢查之後發現read和write的thread設置都是4,這和CPU數一致,所以能夠判定這並非單顆CPU佔用太高的問題。

接下來須要確認MySQL究竟有沒有利用到多核CPU,這個時候須要的工具叫作pidstat,命令以下:

pidstat -u -t -p 18158 
獲得的結果以下圖所示:


能夠看出其實mysqld是能夠利用到多核CPU的,那麼此時能夠獲得一個推斷某個CPU上作的事情太佔資源了

通常這種最佔資源的工做必定會在INNODB_TRX裏留下一些端倪,所以檢查一下:

 反覆的檢查TRX,發現mysql在不停的執行這個SQL,只是where條件裏的值發生了變化,至此我能夠推斷出業務應該是寫了一個循環來遍歷一個list,而後對每一個item都執行update操做。 
應該是寫了這麼一段代碼在處理問題:

for (item in list) { update_db(item); }

檢查這個表並無索引,給where條件中的列加上索引,再次檢查CPU的佔用,發現如今的佔用已經下降到了16
%左右,雖然仍是很高,可是已經實際上解決了該問題。 這裏我有點感慨,DBA並非你會寫SQL就能夠乾的,DBA其實是運維人員的一種,運維要掌握多少種技能恐怕只有運維小夥伴們清楚,其實技術難度並不比寫Java代碼低。
DBA掌握多少種檢查問題的手段,DBA面對問題時能不能第一時間找準方向,這都是經驗和功力的展示。 文章轉自:Linux公社的RSS地址:https:
//www.linuxidc.com/rssFeed.aspx 本文永久更新連接地址:https://www.linuxidc.com/Linux/2018-12/155811.htm
相關文章
相關標籤/搜索