通過自治服務解決MySQL實例CPU使用率過高的問題
本文將介紹如何使用數(shù)據(jù)庫自治服務DAS(Database Autonomy Service)(原CloudDBA)來定位系統(tǒng)中的慢SQL和其它異常SQL語句,您可通過自治服務提供的建議優(yōu)化這些SQL語句,降低實例的CPU使用率以提升系統(tǒng)效率。
問題描述
在使用云數(shù)據(jù)庫RDS MySQL的過程中,經(jīng)常會因CPU使用率過高而導致的系統(tǒng)異常,例如響應變慢、無法獲取連接和出現(xiàn)報錯等。
問題原因
在CPU使用率過高的場景中,有95%以上的問題都是由異常SQL所致。當業(yè)務提交的SQL語句不夠優(yōu)化時,就會對數(shù)據(jù)庫的性能產(chǎn)生如下影響。另外,大量行鎖沖突、行鎖等待或后臺任務也有可能導致實例CPU使用率過高,但這些狀況出現(xiàn)的概率非常低,本文不做討論。
使數(shù)據(jù)庫產(chǎn)生大量的邏輯讀,從而導致CPU使用率過高。
使數(shù)據(jù)庫產(chǎn)生大量的物理讀,從而導致IOPS和I/O延時過高。
關于邏輯讀和物理讀的相關介紹,請參見更多信息。
解決方案
阿里云提醒您:
如果您對實例或數(shù)據(jù)有修改、變更等風險操作,務必注意實例的容災、容錯能力,確保數(shù)據(jù)安全。
如果您對實例(包括但不限于ECS、RDS)等進行配置與數(shù)據(jù)修改,建議提前創(chuàng)建快照或開啟RDS日志備份等功能。
如果您在阿里云平臺授權或者提交過登錄賬號、密碼等安全信息,建議您及時修改。
使用SQL診斷功能排查異常SQL語句
- 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側(cè)導航欄中,選擇
。選擇要查詢的時間,單擊確定。
說明目前只支持顯示最近1個月內(nèi)的慢SQL數(shù)據(jù)。
若實例中有慢SQL,圖示中會以圖的方式顯示慢SQL產(chǎn)生的時間點和個數(shù)。單擊圖中的時間點,下方的列表就會顯示其對應的所有慢SQL信息。
如何分析慢SQL。
重點關注慢日志明細中的返回行和掃描行的值。每條SQL語句都有很多掃描行數(shù)但返回行數(shù)都為0,說明系統(tǒng)產(chǎn)生了大量的邏輯讀和物理讀。產(chǎn)生物理讀是因為內(nèi)存大小有限,不可能緩存所有數(shù)據(jù),當有大量數(shù)據(jù)請求時必然會產(chǎn)生大量物理I/O請求。大量的邏輯讀會占用大量的CPU資源,導致CPU使用率上漲。
單擊SQL欄中的SQL語句,查看該SQL語句的詳情。
單擊SQL優(yōu)化建議,即可查看CloudDBA給該SQL語句提出的優(yōu)化建議。
從下圖的分析結(jié)果可以看出,該SQL語句執(zhí)行時缺少對應的索引,導致執(zhí)行該語句時要全表掃描。另外,根據(jù)MySQL的數(shù)據(jù)更新機制,每次執(zhí)行該語句時整個表格都會被鎖,進而使問題更加嚴重。凡是執(zhí)行該語句的session都會出現(xiàn)排隊等待的狀況,單次執(zhí)行成本又極高,所以就很容易導致CPU使用率較高甚至達到100%的狀況。
根據(jù)優(yōu)化建議優(yōu)化異常SQL語句,CPU使用率過高的問題就會隨之而解。
使用SQL統(tǒng)計功能排查異常SQL語句
若使用SQL統(tǒng)計功能排查異常SQL語句,請參見使用說明。
SQL審計需另外計費,為節(jié)約成本,您可以在查看數(shù)據(jù)庫SQL語句前開通SQL審計,然后待問題排查完畢后再關閉該功能。
更多信息
數(shù)據(jù)庫中的數(shù)據(jù)是以數(shù)據(jù)塊為基本操作單位,一個MySQL數(shù)據(jù)塊是8 KB,一次邏輯讀或物理讀對應一個數(shù)據(jù)塊的讀取操作。當數(shù)據(jù)庫執(zhí)行業(yè)務查詢語句(包括數(shù)據(jù)修改操作)時,CPU會先從內(nèi)存中請求數(shù)據(jù)塊。如果內(nèi)存中有對應的數(shù)據(jù),CPU執(zhí)行計算任務后,將結(jié)果返回給用戶。如果內(nèi)存中沒有對應的數(shù)據(jù),系統(tǒng)會觸發(fā)從磁盤讀取數(shù)據(jù)的操作。這兩個數(shù)據(jù)獲取過程分別是邏輯讀和物理讀,如下圖所示。
相關文檔
適用于
云數(shù)據(jù)庫RDS MySQL