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

2021-06-30 11:37 更新

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

newSQL 請(qǐng)求

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)