本文介紹AnalyticDB MySQL版的查詢處理流程和執行計劃中的相關概念。

查詢流程

AnalyticDB MySQL版使用SQL語言完成用戶和系統內部存儲數據之間的交互。SQL查詢的執行計劃生成流程如下:
  1. 客戶端將SQL語句提交到AnalyticDB MySQL版的前端接入節點(即Controller節點)。更多關于接入節點的詳情,請參見技術架構
  2. Controller節點中解析器(Parser)會對SQL語句進行解析并生成語法樹,然后生成初步邏輯執行計劃。
  3. Controller節點中優化器(Optimizer)會評估是否需要對初步邏輯執行計劃進行優化重寫,并生成最終的邏輯執行計劃(Plan),并根據數據是否需要在網絡間傳輸來決定是否需要對計劃進行切分。邏輯執行計劃中會規定特定的執行處理方式,例如Join類型、Join順序、聚合方式以及數據重分布方式等。
  4. 執行計劃任務的節點(即Executor節點)會接收最終的邏輯執行計劃并將其轉化成物理執行計劃。物理執行計劃由Stage和算子(Operator)組成,物理執行計劃中的算子(Operator)會對數據按照一定規則進行處理。
  5. Executor節點將數據處理的最終結果返回到客戶端,或者寫入AnalyticDB MySQL版集群的內部表以及其它外部存儲系統(如OSS)中。

執行計劃相關概念

了解以下概念能幫助您更好地分析AnalyticDB MySQL版的執行計劃(即物理執行計劃):
  • Stage
    在執行階段,AnalyticDB MySQL版中的查詢會首先被切分為多個Stage來執行,一個Stage就是執行計劃中某一部分的物理實體。Stage的數據來源可以是底層存儲系統中的數據或者網絡中傳輸的數據,一個Stage由分布在不同Executor節點上相同類型的Task組成,多個Task會并行處理數據。
    說明 AnalyticDB MySQL版SQL診斷功能支持對Stage級別進行結果診斷。更多詳情,請參見Stage級別診斷結果
  • Task

    Task是一個Stage在某個Executor節點上的執行實體,多個同類型的Task組成一個Stage,在集群內部并行處理數據。

  • 算子(Operator)
    算子是AnalyticDB MySQL版的基本數據處理單元。AnalyticDB MySQL版會根據算子所表達的語義或算子間的依賴關系,決定使用并行還是串行執行來處理數據。
    說明 AnalyticDB MySQL版SQL診斷功能支持對算子級別進行結果診斷。更多詳情,請參見算子級別診斷結果
查詢計劃的執行
上圖是一個典型分組聚合查詢的處理流程,AnalyticDB MySQL版的Controller節點會把查詢的邏輯執行計劃(Plan)分片下發到執行計劃任務的各個節點上,其中:
  • Stage 2由4個Task組成,并行執行數據的掃描、過濾以及局部聚合等操作。
  • Stage 1由2個Task執行,并行執行最終的聚合操作。
  • Stage 0由1個Task執行,負責匯總Stage 1的2個Task生成的最終聚合結果。