您的位置:首頁 > 軟件教程 > 教程 > 深度解析GaussDB(DWS)行執(zhí)行引擎

深度解析GaussDB(DWS)行執(zhí)行引擎

來源:好特整理 | 時(shí)間:2024-05-11 09:48:58 | 閱讀:193 |  標(biāo)簽: 引擎 S SSD   | 分享到:

本文分享自華為云社區(qū)《GaussDB(DWS)行執(zhí)行引擎詳解》,作者:yd_227398895。 1.前言 GaussDB(DWS)包含三大引擎,一是SQL執(zhí)行引擎,用來解析用戶輸入的SQL語句,生成執(zhí)行計(jì)劃,供執(zhí)行引擎來執(zhí)行;二是執(zhí)行引擎,其中包含了行執(zhí)行引擎和列執(zhí)行引擎,執(zhí)行引擎即查詢的執(zhí)行者,

本文分享自華為云社區(qū)《GaussDB(DWS)行執(zhí)行引擎詳解》,作者:yd_227398895。

華為云的GaussDB(DWS)是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)系統(tǒng),它包含了三大引擎:SQL執(zhí)行引擎、執(zhí)行引擎和存儲(chǔ)引擎。其中,執(zhí)行引擎又包含了行執(zhí)行引擎和列執(zhí)行引擎。行執(zhí)行引擎在行存表中發(fā)揮作用,適用于傳統(tǒng)的OLTP(OnLine Transaction Processsing 聯(lián)機(jī)事務(wù)處理)場(chǎng)景,特別適合需要頻繁進(jìn)行增刪改查操作的業(yè)務(wù)。本文將深入探討行執(zhí)行引擎的組成和工作原理。

前言

GaussDB(DWS)包含三大引擎,一是SQL執(zhí)行引擎,用來解析用戶輸入的SQL語句,生成執(zhí)行計(jì)劃,供執(zhí)行引擎來執(zhí)行;二是執(zhí)行引擎,其中包含了行執(zhí)行引擎和列執(zhí)行引擎,執(zhí)行引擎即查詢的執(zhí)行者,位于優(yōu)化器和存儲(chǔ)引擎之間,負(fù)責(zé)將數(shù)據(jù)從存儲(chǔ)引擎中讀取出來,并根據(jù)計(jì)劃將數(shù)據(jù)處理加工后返回給客戶端,執(zhí)行引擎的目標(biāo)是為了更好地利用計(jì)算資源,更快地完成計(jì)算。三是存儲(chǔ)引擎,決定了數(shù)據(jù)庫(kù)數(shù)據(jù)的存取方式,直接影響了數(shù)據(jù)庫(kù)的讀寫性能。

其中行執(zhí)行引擎應(yīng)用于行存表中,傳統(tǒng)的OLTP(OnLine Transaction Processsing 聯(lián)機(jī)事務(wù)處理)場(chǎng)景與功能、業(yè)務(wù)強(qiáng)相關(guān),數(shù)據(jù)需要進(jìn)行頻繁的增刪改查,這時(shí)比較適合使用行存儲(chǔ)式。行存儲(chǔ)的優(yōu)勢(shì)主要有兩個(gè)方面:首先是點(diǎn)查性能好,在點(diǎn)查場(chǎng)景下可以直接索引到某行數(shù)據(jù)的元組位置;其次就是更新效率高,行存儲(chǔ)在實(shí)時(shí)并發(fā)入庫(kù),并發(fā)更新方面依然有著比較大的優(yōu)勢(shì)。行執(zhí)行引擎的關(guān)鍵就是:一次處理一行數(shù)據(jù),即一tuple,適合數(shù)據(jù)頻繁更新,增刪改操作多,且查詢結(jié)果涉及表的多列的場(chǎng)景。

行執(zhí)行引擎組成

行執(zhí)行框架

行執(zhí)行引擎的執(zhí)行基本單位是算子,查詢計(jì)劃是以樹的形式存在的,算子是執(zhí)行樹上的每個(gè)節(jié)點(diǎn)。每個(gè)算子需要經(jīng)歷初始化,執(zhí)行,清理的生命周期,執(zhí)行時(shí)包括遞歸遍歷計(jì)劃樹的各個(gè)節(jié)點(diǎn),從計(jì)劃樹根節(jié)點(diǎn)開始,遞歸到葉節(jié)點(diǎn)來獲取一個(gè)tuple,經(jīng)過逐層節(jié)點(diǎn)算子的處理,返回一個(gè)結(jié)果tuple,直到再無tuple。整體算子的執(zhí)行采用Piepline模式,一次一tuple,控制流從上到下,數(shù)據(jù)流由下到上,圖示實(shí)線為控制流,虛線為數(shù)據(jù)流,使用上層來驅(qū)動(dòng)下層。

深度解析GaussDB(DWS)行執(zhí)行引擎

行執(zhí)行引擎算子

算子總共分為四類,掃描算子,控制算子,物化算子,連接算子等。對(duì)于分布式系統(tǒng)而言,還包括著stream算子等。

掃描算子

掃描算子用來掃描表中的數(shù)據(jù),每次獲取一條元組作為上層節(jié)點(diǎn)的輸入, 存在于查詢計(jì)劃樹的葉子節(jié)點(diǎn),它不僅可以掃描表,還可以掃描函數(shù)的結(jié)果集、鏈表結(jié)構(gòu)、子查詢結(jié)果集。一些比較常見的掃描算子如表所示。

連接算子

連接算子對(duì)應(yīng)了關(guān)系代數(shù)中的連接操作,以表 t1 join t2 為例,主要的集中連接類型如下:inner join、left join、right join、full join、semi join、 anti join,其實(shí)現(xiàn)方式包括Nestloop、HashJoin、MergeJoin;

三類連接算子的實(shí)現(xiàn)方式特點(diǎn):

物化算子

物化算子是一類可緩存元組的節(jié)點(diǎn)。在執(zhí)行過程中,很多擴(kuò)展的物理操作符需要首先獲取所有的元組才能進(jìn)行操作(例如聚集函數(shù)操作、沒有索引輔助的排序等),這是要用物化算子將元組緩存起來;

控制算子

控制算子是一類用于處理特殊情況的節(jié)點(diǎn),用于實(shí)現(xiàn)特殊的執(zhí)行流程。

其他算子

其他算子包括Stream算子,以及RemoteQuery等算子

Stream算子主要有三種類型:Gather stream、Broadcast stream、Redistribute stream

深度解析GaussDB(DWS)行執(zhí)行引擎

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)