頻繁全表掃描導致cpu使用率飆升故障處理

一:問題描述

今天早晨收到郵件告警,提示有臺數據庫服務器的cpu使用率在50%-70%間波動,有幾個瞬間達到了90多。

通過巡檢數據庫,發現有兩處異常:

① 故障期間的慢查詢日誌其中90%的慢查詢來自於同一個sql:

在半個小時內執行了2779次該sql。雖然sql單條執行不算很慢,只有2秒。但是執行次數太過頻繁。

查看執行計劃,發現走了全表掃描,該表數據量有200萬。

相當於平均每秒要掃描一次兩百萬條數據的表。

 

② 執行以下語句能看到有幾十條執行時間在1秒的查詢。平時這些查詢都執行得很快,執行該sql是看不到這些語句的。說明數據庫負載有些高了。

SELECT * FROM information_schema. `PROCESSLIST`

WHERE info IS NOT NULL

ORDER BY TIME DESC;

 

二:出錯原因

頻繁執行一個全表掃描的慢查詢導致cpu使用率上升。

 

三:解決辦法

創建索引優化

CREATE INDEX ind_user_create_tm ON us_user_eject(user_id,create_tm);

 

四:總結

不能對單條執行不算很慢的慢查詢掉以輕心,當執行次數很高了也容易引發故障。

之前也遇到過一次同樣的問題。上次是因爲使用了sysdate()沒有走索引,後來將sysdate()改成now()好了。

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