詳解GaussDB(DWS)中的行執行引擎

华为云开发者联盟發表於2024-05-11

本文分享自華為雲社群《GaussDB(DWS)行執行引擎詳解》,作者:yd_227398895。

1.前言

GaussDB(DWS)包含三大引擎,一是SQL執行引擎,用來解析使用者輸入的SQL語句,生成執行計劃,供執行引擎來執行;二是執行引擎,其中包含了行執行引擎和列執行引擎,執行引擎即查詢的執行者,位於最佳化器和儲存引擎之間,負責將資料從儲存引擎中讀取出來,並根據計劃將資料處理加工後返回給客戶端,執行引擎的目標是為了更好地利用計算資源,更快地完成計算。三是儲存引擎,決定了資料庫資料的存取方式,直接影響了資料庫的讀寫效能。

其中行執行引擎應用於行存表中,傳統的OLTP(OnLine Transaction Processsing 聯機事務處理)場景與功能、業務強相關,資料需要進行頻繁的增刪改查,這時比較適合使用行儲存式。行儲存的優勢主要有兩個方面:首先是點查效能好,在點查場景下可以直接索引到某行資料的元組位置;其次就是更新效率高,行儲存在實時併發入庫,併發更新方面依然有著比較大的優勢。行執行引擎的關鍵就是:一次處理一行資料,即一tuple,適合資料頻繁更新,增刪改操作多,且查詢結果涉及表的多列的場景。

2.行執行引擎組成

2.1 行執行框架

行執行引擎的執行基本單位是運算元,查詢計劃是以樹的形式存在的,運算元是執行樹上的每個節點。每個運算元需要經歷初始化,執行,清理的生命週期,執行時包括遞迴遍歷計劃樹的各個節點,從計劃樹根節點開始,遞迴到葉節點來獲取一個tuple,經過逐層節點運算元的處理,返回一個結果tuple,直到再無tuple。整體運算元的執行採用Piepline模式,一次一tuple,控制流從上到下,資料流由下到上,圖示實線為控制流,虛線為資料流,使用上層來驅動下層。
控制流和資料流

2.2 行執行引擎運算元

運算元總共分為四類,掃描運算元,控制運算元,物化運算元,連線運算元等。對於分散式系統而言,還包括著stream運算元等。

2.2.1 掃描運算元

掃描運算元用來掃描表中的資料,每次獲取一條元組作為上層節點的輸入, 存在於查詢計劃樹的葉子節點,它不僅可以掃描表,還可以掃描函式的結果集、連結串列結構、子查詢結果集。一些比較常見的掃描運算元如表所示。

詳解GaussDB(DWS)中的行執行引擎

2.2.2 連線運算元

連線運算元對應了關係代數中的連線操作,以表 t1 join t2 為例,主要的集中連線型別如下:inner join、left join、right join、full join、semi join、 anti join,其實現方式包括Nestloop、HashJoin、MergeJoin;

詳解GaussDB(DWS)中的行執行引擎

三類連線運算元的實現方式特點:

詳解GaussDB(DWS)中的行執行引擎

2.2.3 物化運算元

物化運算元是一類可快取元組的節點。在執行過程中,很多擴充套件的物理運算子需要首先獲取所有的元組才能進行操作(例如聚集函式操作、沒有索引輔助的排序等),這是要用物化運算元將元組快取起來;

詳解GaussDB(DWS)中的行執行引擎

2.2.4 控制運算元

控制運算元是一類用於處理特殊情況的節點,用於實現特殊的執行流程。

詳解GaussDB(DWS)中的行執行引擎

2.2.5 其他運算元

其他運算元包括Stream運算元,以及RemoteQuery等運算元

Stream運算元主要有三種型別:Gather stream、Broadcast stream、Redistribute stream

Gather運算元: 每個源結點都將其資料傳送給目標結點進行匯聚

gather運算元

Broadcast stream: 由一個源節點將其資料發給N個目標節點進行運算

Redistrubute stream: 每個源節點將其資料根據連線條件計算Hash值,根據重新計算的Hash值進行分佈,發給對應的目標節點

詳解GaussDB(DWS)中的行執行引擎

3. 執行框架總結

本文主要講解了如下幾個方面:

  • 大致介紹了GaussDB(DWS)行執行引擎在整個資料庫系統中的位置;
  • 介紹了行執行引擎的框架;
  • 最後介紹了一些常見和常用的行執行引擎相關的運算元。

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章