標籤:mysql進程cpu負載過高300%
今日接到同事的電話,說公用帳號中的遊戲無法登陸,使用者不能玩了,麻煩儘快解決。
1、登陸IDC機房查看伺服器流量圖,流量正常,排除故障與流量無關。
2、登陸公用帳號中的遊戲所在伺服器發現系統互載過高,mysql進程CPU使用率超過300%。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/94/wKiom1WhD27DfMuOAACSmwBjW2A094.jpg" title="QQ圖片20150711204218.png" alt="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小時,天天跟開發人員說,需要大量查詢的表中一定要加索引、一定要加索引,可是依舊出現因無索引導致發生故障的事件。由此可見規範開發人員的工作習慣、規範開發流程是多麼重要。
藉此記錄一下故障的全過程,也希望能給朋友們一個解決問題思路借鑒。
本文出自 “快樂之魚” 部落格,請務必保留此出處http://01000.blog.51cto.com/2410614/1673296
解決linux 系統中Mysql 進程佔用CPU 300%故障