本文將介紹如何使用資料庫自治服務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語句
- 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列中,選擇
。選擇要查詢的時間,單擊確定。
說明目前只支援顯示最近1個月內的慢SQL資料。
若執行個體中有慢SQL,圖示中會以圖的方式顯示慢SQL產生的時間點和個數。單擊圖中的時間點,下方的列表就會顯示其對應的所有慢SQL資訊。
如何分析慢SQL。
重點關注慢日誌明細中的返回行和掃描行的值。每條SQL語句都有很多掃描行數但返回行數都為0,說明系統產生了大量的邏輯讀和物理讀。產生物理讀是因為記憶體大小有限,不可能緩衝所有資料,當有大量資料請求時必然會產生大量物理I/O請求。大量的邏輯讀會佔用大量的CPU資源,導致CPU使用率上漲。
單擊SQL欄中的SQL語句,查看該SQL語句的詳情。
單擊SQL最佳化建議,即可查看CloudDBA給該SQL語句提出的最佳化建議。
從下圖的分析結果可以看出,該SQL語句執行時缺少對應的索引,導致執行該語句時要全表掃描。另外,根據MySQL的資料更新機制,每次執行該語句時整個表格都會被鎖,進而使問題更加嚴重。凡是執行該語句的session都會出現排隊等待的狀況,單次執行成本又極高,所以就很容易導致CPU使用率較高甚至達到100%的狀況。
根據最佳化建議最佳化異常SQL語句,CPU使用率過高的問題就會隨之而解。
使用SQL統計功能排查異常SQL語句
若使用SQL統計功能排查異常SQL語句,請參見使用說明。
SQL審計需另外計費,為節約成本,您可以在查看資料庫SQL語句前開通SQL審計,然後待問題排查完畢後再關閉該功能。
更多資訊
資料庫中的資料是以資料區塊為基本操作單位,一個MySQL資料區塊是8 KB,一次邏輯讀或物理讀對應一個資料區塊的讀取操作。當資料庫執行業務查詢語句(包括資料修改操作)時,CPU會先從記憶體中請求資料區塊。如果記憶體中有對應的資料,CPU執行計算任務後,將結果返回給使用者。如果記憶體中沒有對應的資料,系統會觸發從磁碟讀取資料的操作。這兩個資料擷取過程分別是邏輯讀和物理讀,如下圖所示。
相關文檔
適用於
雲資料庫RDS MySQL