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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM