全部產品
Search
文件中心

AnalyticDB:使用執行計畫分析查詢

更新時間:Jul 06, 2024

AnalyticDB MySQL版的SQL診斷功能支援以樹形圖的形式展現SQL查詢的執行計畫。執行計畫樹分為兩層:第一層是Stage層,第二層是運算元(Operator)層。本文介紹如何使用Stage層和運算元層執行計畫樹來分析查詢。

Stage層執行計畫樹

Stage層執行計畫樹由多個Stage節點群組成,資料流向自下而上,先由具有掃描運算元的Stage進行資料掃描,再經過中間Stage節點的層層處理後,再由最上層的根節點將查詢結果返回用戶端。

1
Stage層執行計畫樹中主要包含如下資訊:
  • 基本資料
    圖中的每個矩形框代表一個Stage,框裡會包含Stage ID、資料輸出類型、耗時或記憶體(選擇按內存排序時展示)等資訊。
    說明 當Stage層執行計畫樹上出現紅色警示號,表示該Stage被診斷出存在可最佳化點。
  • 資料輸出行數

    兩個相鄰Stage間連線上的數字表示上遊Stage向下遊Stage輸出的資料行數。資料輸出行數越多,Stage間的連線越粗。

  • 資料輸出方法
    表示在兩個相鄰的Stage間,上遊向下遊Stage傳輸資料時所用的方法。AnalyticDB MySQL版支援以下資料輸出方法。
    資料輸出方法說明
    Broadcast表示上遊Stage中每個計算節點的資料都會複製到所有下遊Stage的計算節點。1-1
    Repartition表示上遊Stage中每個節點的資料會按照固定的規則切分後,再分發到下遊Stage的指定計算節點。1-2
    Gather表示上遊Stage中每個節點的資料會集中到下遊Stage中某一個特定的計算節點。1-3
  • 查看記憶體使用量率或執行耗時Top 10的Stage詳情
    執行計畫樹右側的Top10耗時/內存倒序頁簽下,會展示執行耗時佔總查詢耗時比例最大,或使用記憶體佔總查詢使用記憶體比例最大的前10個Stage的ID和對應的比例。
    說明
    • 預設按耗時排序,您也可以選擇執行計畫樹右上方的按內存排序。
    • Top10耗時/內存倒序頁簽下不會顯示記憶體使用量量或執行耗時佔比小於1%的Stage資料。
    • 由於統計方式的差異,可能存在一個查詢中的所有Stage耗時或記憶體的百分比之和不等於100%的情況。
  • 診斷結果
    單擊執行計畫樹中某個Stage(如Stage[1]),即可在右側查看對應Stage的診斷結果詳情,包括如下兩類診斷:
    • Stage診斷:這類診斷結果包含了對目標Stage診斷結果的詳細說明,包括診斷出的問題(如存在較大的資料量被廣播或資料扭曲)以及對應的調優方案。
    • 運算元診斷:這類診斷僅展示當前Stage中有問題的運算元名稱以及對應問題的概述,詳細的說明和調優方案需要到運算元執行計畫樹中才能看到。更多詳情,請參見運算元層計劃執行樹

    關於Stage的診斷結果的說明,請參見Stage層級診斷結果

  • 統計信息

    診斷結果下方展示了目標Stage中各項指標的統計信息

    指標項說明
    峰值內存目標Stage的峰值記憶體消耗量。系統會根據實際記憶體消耗量選擇Bytes、KB、MB、GB或TB為單位。
    累積耗時目標Stage記憶體中所有運算元多節點多線程執行時耗時的累加,系統會根據實際耗時選擇ms、s、m或h為單位。
    說明 該累積耗時不能和當前查詢的總耗時進行比較。
    輸出行數目標Stage輸出的行數。
    輸出大小目標Stage輸出的資料量。系統會根據實際資料量選擇Bytes、KB、MB、GB或TB為單位。
    輸入行數目標Stage輸入的行數。
    輸入大小目標Stage輸入的資料量。系統會根據實際資料量選擇Bytes、KB、MB、GB或TB為單位。
    掃描行數目標Stage掃描的行數。
    說明 僅當目標Stage中存在資料掃描運算元時支援該參數。
    掃描量目標Stage掃描的資料量。系統會根據實際資料量選擇Bytes、KB、MB、GB或TB為單位。
    說明 僅當目標Stage中存在資料掃描運算元時支援該參數。

運算元層計劃執行樹

運算元層執行計畫由多個運算元組成,圖中的每個矩形框代表一個運算元,資料流向自下而上,掃描資料過程或接收網路資料由最上遊的運算元(TableScan和RemoteSource)完成,掃描到的資料和接收到的網路資料經過中間運算元層層處理後,再由最上層的根節點運算元(StageOutput或Output)將資料輸出到下遊Stage或將查詢結果返回給用戶端。

您可以將滑鼠移動到目標Stage上,在彈出的資訊框中單擊查看Stage計劃,即可進入對應Stage的計劃詳情頁來查看運算元層計劃執行樹。3
運算元層執行計畫樹中包含如下資訊:2
說明 當運算元層執行計畫樹上出現紅色警示號,表示該運算元被診斷出存在可最佳化點。
  • 基本資料

    圖中的每個矩形框代表一個運算元,框裡會包含運算元名稱及ID、運算元屬性(如Join運算元的Join條件、演算法等)、耗時或記憶體(選擇按內存排序時展示)等資訊。

  • 資料輸出行數

    兩個相鄰運算元間連線上的數字表示上遊運算元向下遊運算元輸出的資料行數。資料輸出行數越多,運算元間的連線越粗。

  • 查看記憶體使用量率或執行耗時Top 10的運算元詳情
    執行計畫樹右側的Top10耗時/內存倒序頁簽下,會展示執行耗時佔總查詢耗時比例最大,或使用記憶體佔總查詢使用記憶體比例最大的前10個運算元的ID和對應的比例。
    說明
    • 預設按耗時排序,您也可以選擇執行計畫樹右上方的按內存排序。
    • Top10耗時/內存倒序頁簽下不會顯示記憶體使用量量或執行耗時佔比小於1%的運算元資料。
    • 由於統計方式的差異,可能存在一個Stage中的所有運算元耗時或記憶體的百分比之和不等於100%的情況。
  • 診斷結果
    單擊執行計畫樹中某個運算元(如Join[36148]),即可在右側查看對應運算元的診斷結果詳情,包括診斷出的問題(如存在資料膨脹或Join的右表過大)以及對應的調優方案。更多關於運算元診斷的詳情,請參見運算元層級診斷結果4
  • 統計信息

    診斷結果下方展示了目標運算元中各項指標的統計信息

    指標項說明
    峰值內存目標運算元的峰值記憶體消耗量。系統會根據實際記憶體消耗量選擇Bytes、KB、MB、GB或TB為單位。
    耗時目標運算元在一定並發度上的平均耗時,系統會根據實際耗時選擇ms、s、m或h為單位。
    說明 該耗時可以和當前查詢的耗時進行比較。
    輸出行數目標運算元輸出的行數。
    輸出大小目標運算元輸出的資料量。系統會根據實際資料量選擇Bytes、KB、MB、GB或TB為單位。
    輸入行數目標運算元輸入的行數。
    輸入大小目標運算元輸入的資料量。系統會根據實際資料量選擇Bytes、KB、MB、GB或TB為單位。
    Builder統計信息包括Builder的類型、峰值記憶體、耗時、輸出輸入行數和資料量等資訊。主要有如下Builder類型:
    • HashBuilder:用於構建Hash表來完成Hash Join計算。
    • SetBuilder:用於構造Set結構來完成Semi Join計算。
    • NestLoopBuilder:用於完成Nest Loop Join計算。
    說明 僅Join運算元支援該統計指標項。
    屬性不同運算元的屬性資訊不同,例如Join運算元的屬性資訊中包括了Join的類型、方式等。更多詳情,請參見運算元