全部產品
Search
文件中心

AnalyticDB:Query層級診斷結果

更新時間:Jul 06, 2024

AnalyticDB MySQL版的SQL診斷功能可以對SQL查詢的Query、Stage和運算元(Operator)層級的資訊分別進行統計,再在統計資訊的基礎上進行診斷並提供調優建議。本文介紹如何查看和分析Query層級診斷結果。

診斷結果類型

說明 查看Query層級診斷結果的方法,請參見查看診斷結果

查詢返回用戶端的資料量較大

  • 問題
    大量資料返回到用戶端會導致慢查詢,還會佔用部分網路前端資源。
    說明 您可以在查詢詳情頁面的查詢屬性地區查看返回數據的資訊。查看方法,請參見查看查詢屬性
  • 建議
    • 減少直接返回到用戶端的資料量。例如您可以在查詢時增加LIMIT關鍵字或增加查詢的過濾條件。
    • 通過外表將資料匯出至其他系統(例如OSS。詳細操作步驟,請參見匯出至OSS)來減少返回到用戶端的資料量。

查詢消耗的記憶體資源較大

  • 問題
    查詢消耗了大量記憶體,可能導致其他查詢無法執行、執行變慢甚至影響到AnalyticDB MySQL版叢集整體的穩定性。
    說明 您可以在查詢詳情頁面的查詢屬性地區查看峰值內存資訊。查看方法,請參見查看查詢屬性
  • 建議

    先定位查詢消耗較大記憶體的原因,再通過AnalyticDB MySQL版SQL診斷中的執行計畫找到消耗記憶體較多的Stage或者運算元,更多詳情,請參見消耗記憶體的慢查詢使用執行計畫分析查詢

查詢產生的Stage個數較多

  • 問題
    查詢產生的Stage個數較多,會佔用較多的網路資源,並且提升系統處理的複雜度,對叢集整體穩定性有一定風險。
    說明 更多關於Stage的資訊,請參見影響查詢效能的因素
  • 建議
    • 在資料寫入AnalyticDB MySQL版叢集前,通過提前聯表來減少叢集中的表個數。
    • SQL中的Join數量越多,AnalyticDB MySQL版為查詢產生的Stage數量越多。因此,您可以通過最佳化SQL減少Join數量,來減少因查詢產生的Stage個數。
    • 使用物化視圖進行查詢時,AnalyticDB MySQL版能通過複用Stage來減少因查詢產生的Stage數量。更多關於物化視圖的詳情,請參見物化視圖

查詢讀取的資料量較大

  • 問題
    查詢讀取的資料量較大,會佔用較多的磁碟IO資源,影響其他查詢或者資料的寫入過程。
    說明 您可以在查詢詳情頁面的查詢屬性地區查看掃描數據的資訊。查看方法,請參見查看查詢屬性
  • 建議

    先找到讀取資料量較大的Stage以及相關的表掃描運算元(TableScan)。您可以在AnalyticDB MySQL版SQL診斷的Stage層或運算元層執行計畫中的統計信息地區查看對應Stage掃描行數掃描量,或TableScan運算元的輸入行數輸入大小來判斷Stage和TableScan運算元的掃描資料量。更多詳情,請參見Stage統計資訊運算元統計資訊

    找到掃描資料量較大的表掃描運算元後,您可以考慮如下方式進行調優:
    • 在查詢中增加AND過濾條件。
    • 調整已有的過濾條件,減少過濾後的資料量。
    • 檢查是否存在沒有下推的過濾條件。若存在,請參見過濾條件沒有下推中的建議進行最佳化。