天天看點

RDS for MySQL資料庫CPU被打滿解決過程

RDS執行個體CPU一直被打滿

1、問題描述

版本:阿裡雲專有雲V2版本

客戶回報,通過drds執行SQL比較慢,之前很快就能執行完的SQL,需要三四秒才可以執行成功。

2、問題排查

首先排查drds的狀況,通過drds manager發現該drds下面有兩個docker節點,并且都是正常的。

檢查drds下面挂的rds的執行個體狀态,一共有四個rds,其中一個rds的CPU一直被打滿,并且卡頓時間跟客戶描述的一緻。

RDS for MySQL資料庫CPU被打滿解決過程

問題已經基本定位到時其中一個RDS執行個體的CPU被打滿,導緻查詢緩慢,拖慢了整個drds執行個體。

*

執行個體的cpu被打滿,一般是由兩種情況:

1、慢SQL,全表掃描等。此時qps不高,但是查詢占用了大量的邏輯IO,需要掃描大量的資料行,導緻CPU資源被大量消耗

2、qps高,業務量高峰。此時慢SQL不是問題所在。那就需要考慮從實際的規格和架構方面入手,可以提高rds的規格配置,增加隻讀執行個體等。

回到問題,登入到該rds。show processlit發現有很多慢查詢,如圖:

RDS for MySQL資料庫CPU被打滿解決過程

可以明顯看到這種SQL執行時間特别長,達到了21秒,并且占用的邏輯讀也特别高。問題還是在慢SQL方面。

那它的備庫現在什麼情況呢,通過show slave status發現。主備已經停止同步。

RDS for MySQL資料庫CPU被打滿解決過程
RDS for MySQL資料庫CPU被打滿解決過程

此時已經不能登入到備庫,檢視mysql程序,已經挂掉。

RDS for MySQL資料庫CPU被打滿解決過程

手動拉起mysql程序。後可以登入了。可以看到剛拉起主備延遲很高

RDS for MySQL資料庫CPU被打滿解決過程
RDS for MySQL資料庫CPU被打滿解決過程
RDS for MySQL資料庫CPU被打滿解決過程

3、問題解決

慢SQL已經回報給客戶進行處理,并且通知研發注意這種SQL,應用設計和開發過程中,要考慮查詢的優化,遵守 MySQL 優化的一般優化原則,降低查詢的邏輯 IO,提高應用可擴充性。

客戶将SQL kill處理後,該rds的cpu恢複正常,并且從drds查詢速度也恢複正常,問題解決。