OceanBase SQL 請求執(zhí)行流程

2021-06-30 11:37 更新

SQL 引擎從接受 SQL 請求到執(zhí)行的典型流程如下圖所示:

newSQL 請求

下表為 SQL 請求執(zhí)行流程的步驟說明。

 步驟  說明
 Parser(詞法/語法解析模塊)  在收到用戶發(fā)送的 SQL 請求串后,Parser 會將字符串分成一個個的“單詞”,并根據(jù)預先設定好的語法規(guī)則解析整個請求,將 SQL 請求字符串轉換成帶有語法結構信息的內存數(shù)據(jù)結構,稱為語法樹(Syntax Tree)。
 Plan Cache(執(zhí)行計劃緩存模塊)  執(zhí)行計劃緩存模塊會將該 SQL 第一次生成的執(zhí)行計劃緩存在內存中,后續(xù)的執(zhí)行可以反復執(zhí)行這個計劃,避免了重復查詢優(yōu)化的過程。
 Resolver(語義解析模塊)  Resolver 將生成的語法樹轉換為帶有數(shù)據(jù)庫語義信息的內部數(shù)據(jù)結構。在這一過程中,Resolver 將根據(jù)數(shù)據(jù)庫元信息將 SQL 請求中的 Token 翻譯成對應的對象(例如庫、表、列、索引等),生成的數(shù)據(jù)結構叫做 Statement Tree。
 Transfomer(邏輯改寫模塊)  分析用戶 SQL 的語義,并根據(jù)內部的規(guī)則或代價模型,將用戶 SQL 改寫為與之等價的其他形式,并將其提供給后續(xù)的優(yōu)化器做進一步的優(yōu)化。Transformer 的工作方式是在原 Statement Tree 上做等價變換,變換的結果仍然是一棵 Statement Tree。
 Optimizer(優(yōu)化器)  優(yōu)化器是整個 SQL 請求優(yōu)化的核心,其作用是為 SQL 請求生成最佳的執(zhí)行計劃。在優(yōu)化過程中,優(yōu)化器需要綜合考慮 SQL 請求的語義、對象數(shù)據(jù)特征、對象物理分布等多方面因素,解決訪問路徑選擇、聯(lián)接順序選擇、聯(lián)接算法選擇、分布式計劃生成等多個核心問題,最終選擇一個對應該 SQL 的最佳執(zhí)行計劃。
 Code Generator(代碼生成器)  將執(zhí)行計劃轉換為可執(zhí)行的代碼,但是不做任何優(yōu)化選擇。
 Executor(執(zhí)行器)
     啟動 SQL 的執(zhí)行過程。
  • 對于本地執(zhí)行計劃,Executor 會簡單的從執(zhí)行計劃的頂端的算子開始調用,根據(jù)算子自身的邏輯完成整個執(zhí)行的過程,并返回執(zhí)行結果。
  • 對于遠程或分布式計劃,將執(zhí)行樹分成多個可以調度的子計劃,并通過 RPC 將其發(fā)送給相關的節(jié)點去執(zhí)行。
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號