解決linux 系統中Mysql 進程佔用CPU 300%故障

今日接到同事的電話,說微信公共帳號中的遊戲無法登陸,用戶不能玩了,麻煩儘快解決。

1、登陸IDC機房查看服務器流量圖,流量正常,排除故障與流量無關。

2、登陸微信公共帳號中的遊戲所在服務器發現系統互載過高,mysql進程CPU使用率超過300%。

wKiom1WhD27DfMuOAACSmwBjW2A094.jpg

爲了快速解決問題直接重啓mysql服務後,再查sysql進程CPU使用率依舊高居不下。故障還沒有解決,繼續尋找原因。

3.登陸mysql數據庫,執行show processlist;查看當前正在執行的sql語句,發現幾個表出現“sending data”狀態,sql執行時間過長。

4、通知開發人員檢查這幾個表有沒有增加索引,開發人員居然無法處理,無語。。。

5、等待開發人員返場的時間裏繼續查詢解決方法。在mysql配置文件my.cnf中增加以下參數:

tmp_table_size = 300M

query_cache_size = 1024M

希望通過增加臨時表及查詢緩存大小來解決問題,增加這兩個參數後,發現CPU佔用率有所下降,有一定效果,但還是超過100%。遊戲打開依舊緩慢。

6、本着故障不等人,早點解決問題,用戶就能繼續玩遊戲,用戶也就不會產生投訴的思想。繼續登陸mysql,執行show index from tablename,查詢出現“sending data”的幾個表,發現果然沒有增加索引。此時此該有種想劈人的感覺。

7、執行增加索引的語句,把出現“sending data”的幾個表全部加上索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

重啓mysql服務後,mysql進程的CPU佔用率恢復正常,微信公共帳號中的遊戲可以正常登陸,至此故障得到解決。通知同事去驗證。


此次事件從問題的開始到問題的結束一共耗時2小時,天天跟開發人員說,需要大量查詢的表中一定要加索引、一定要加索引,可是依舊出現因無索引導致發生故障的事件。由此可見規範開發人員的工作習慣、規範開發流程是多麼重要。

藉此記錄一下故障的全過程,也希望能給朋友們一個解決問題思路借鑑。


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