mysql 資料庫 cpu 很高的問題處理

2021-08-20 02:32:50 字數 1144 閱讀 7697

參考:

cpu消耗過大有慢sql造成,慢sql包括全表掃瞄,掃瞄資料量太大,記憶體排序,磁碟排序,鎖爭用等;

mysql>show processlist;

檢視所有連線

現象sql執行狀態為:sending data,copying to tmp table,copying to tmp table on disk,sorting result,using filesort,locked;就有問題了。

所有狀態說明在mysql官網有

a.sending data:sql正從表中查詢資料,如果查詢條件沒有適當索引,會導致sql執行時間過長

b.copying to tmp table on disk:因臨時結果集太大,超過資料庫規定的臨時記憶體大小,需要拷貝臨時結果集到磁碟上

c.sorting result,using filesort:sql正在執行排序操作,排序操作會引起較多的cpu消耗,可以通過新增索引,或

減小排序結果集

不同的例項規格iops能力不同,如,iops為150個,也就是每秒能夠提供150次的隨機磁碟io操作,所以如果使用者的資料量

很大,記憶體很小,因iops的限制,一條慢sql就有可能消耗掉所有io資源,而影響其他sql查詢,對於資料庫就是所有的sql

需要執行很長時間才返回結果集,對於應用會造成整體響應變慢。

臨時表最大所需記憶體需要通過tmp_table_size=1024m設定
連線mysql伺服器

執行top

注意,top中

cpu使用率為cpus即所有cpu使用率之和可能超過100%的,按1鍵可切換檢視每個cpu使用率

兩個解決資料庫cpu使用率過高帖子,貌似沒調優

自己:有兩個地方的資料庫出現過,乙個正式環境,因為某個sql語句問題,導致。後面把那個頁面去掉了,讓別人不能訪問,對應的資料庫殺掉語句 

show processlist;  

kill 程序號 處理掉。後面優化了那個sql語句。另外增加了

tmp_table_size=1024m設定

第二次是測試環境。增加

tmp_table_size 引數 並沒有用,重啟也沒用。kill 掉部分程序後可用,估計是重啟後,某個sql還是執行了導致。

所以還是處理sql優化。要定期關注占用時間比較久的sql語句。

MySQL資料庫快問快答

今天樓主給大家列一下關於資料庫幾個常見問題的要點,如果大家對其中的問題感興趣,可以自行擴充套件研究。相同點 不同點 datetime 兩個或更多個列上的索引被稱作聯合索引,聯合索引又叫復合索引。字首索引就是對文字的前幾個字元 具體是幾個字元在建立索引時指定 建立索引,這樣建立起來的索引更小。但是my...

大量List資料批量插入資料庫很高效的方法

下面方法適用於大量 百萬級別的list資料 插入到oracle表中 private static final int openid phone num 800 經實踐,800一批插入相對較快,這個可以隨便定義 private void insertpmesendtophoneinfo listpho...

MySQL 資料庫 InnoDB引擎的插值問題

innodb是mysql資料庫中唯一乙個支援外來鍵的引擎,但是差值的時候卻得注意一下 比如有兩張表,album id,name,path picture id,name,path,parent album 其中表2中parent album是外來鍵 此時差值insert into picture n...