全部產品
Search
文件中心

:通過自治服務解決MySQL執行個體CPU使用率過高的問題

更新時間:Jun 19, 2024

本文將介紹如何使用資料庫自治服務DAS(Database Autonomy Service)(原CloudDBA)來定位系統中的慢SQL和其它異常SQL語句,您可通過自治服務提供的建議最佳化這些SQL語句,降低執行個體的CPU使用率以提升系統效率。

問題描述

在使用雲資料庫RDS MySQL的過程中,經常會因CPU使用率過高而導致的系統異常,例如響應變慢、無法擷取串連和出現報錯等。

問題原因

在CPU使用率過高的情境中,有95%以上的問題都是由異常SQL所致。當業務提交的SQL語句不夠最佳化時,就會對資料庫的效能產生如下影響。另外,大量行鎖衝突、行鎖等待或背景工作也有可能導致執行個體CPU使用率過高,但這些狀況出現的機率非常低,本文不做討論。

  • 使資料庫產生大量的邏輯讀,從而導致CPU使用率過高。

  • 使資料庫產生大量的物理讀,從而導致IOPS和I/O延時過高。

說明

關於邏輯讀和物理讀的相關介紹,請參見更多資訊

解決方案

說明

阿里雲提醒您:

  • 如果您對執行個體或資料有修改、變更等風險操作,務必注意執行個體的容災、容錯能力,確保資料安全。

  • 如果您對執行個體(包括但不限於ECS、RDS)等進行配置與資料修改,建議提前建立快照或開啟RDS記錄備份等功能。

  • 如果您在阿里雲平台授權或者提交過登入帳號、密碼等安全資訊,建議您及時修改。

使用SQL診斷功能排查異常SQL語句

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
  2. 在左側導覽列中,選擇自治服務(原CloudDBA) > 慢SQL

  3. 選擇要查詢的時間,單擊確定

    說明

    目前只支援顯示最近1個月內的慢SQL資料。

  4. 若執行個體中有慢SQL,圖示中會以圖的方式顯示慢SQL產生的時間點和個數。單擊圖中的時間點,下方的列表就會顯示其對應的所有慢SQL資訊。

    image

  5. 如何分析慢SQL。

    重點關注慢日誌明細中的返回行和掃描行的值。每條SQL語句都有很多掃描行數但返回行數都為0,說明系統產生了大量的邏輯讀和物理讀。產生物理讀是因為記憶體大小有限,不可能緩衝所有資料,當有大量資料請求時必然會產生大量物理I/O請求。大量的邏輯讀會佔用大量的CPU資源,導致CPU使用率上漲。

  6. 單擊SQL欄中的SQL語句,查看該SQL語句的詳情。

  7. 單擊SQL最佳化建議,即可查看CloudDBA給該SQL語句提出的最佳化建議。

    從下圖的分析結果可以看出,該SQL語句執行時缺少對應的索引,導致執行該語句時要全表掃描。另外,根據MySQL的資料更新機制,每次執行該語句時整個表格都會被鎖,進而使問題更加嚴重。凡是執行該語句的session都會出現排隊等待的狀況,單次執行成本又極高,所以就很容易導致CPU使用率較高甚至達到100%的狀況。

  8. 根據最佳化建議最佳化異常SQL語句,CPU使用率過高的問題就會隨之而解。

使用SQL統計功能排查異常SQL語句

若使用SQL統計功能排查異常SQL語句,請參見使用說明

說明

SQL審計需另外計費,為節約成本,您可以在查看資料庫SQL語句前開通SQL審計,然後待問題排查完畢後再關閉該功能。

更多資訊

資料庫中的資料是以資料區塊為基本操作單位,一個MySQL資料區塊是8 KB,一次邏輯讀或物理讀對應一個資料區塊的讀取操作。當資料庫執行業務查詢語句(包括資料修改操作)時,CPU會先從記憶體中請求資料區塊。如果記憶體中有對應的資料,CPU執行計算任務後,將結果返回給使用者。如果記憶體中沒有對應的資料,系統會觸發從磁碟讀取資料的操作。這兩個資料擷取過程分別是邏輯讀和物理讀,如下圖所示。

相關文檔

RDS MySQL慢日誌分析

適用於

雲資料庫RDS MySQL