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

来源:https://www.cnblogs.com/huaweiyun/p/18185668
-Advertisement-
Play Games

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


本文分享自華為雲社區《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 掃描運算元

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

2.2.2 連接運算元

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

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

2.2.3 物化運算元

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

2.2.4 控制運算元

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

2.2.5 其他運算元

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

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

Gather運算元: 每個源結點都將其數據發送給目標結點進行匯聚

gather運算元

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

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

3. 執行框架總結

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

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

 

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 謹防持久化+未授權訪問漏洞入侵伺服器 CVE編號找不到,CNVD有一個:CNVD-2015-07557(國家信息安全漏洞共用平臺漏洞編號)。 這是我之前寫過的文章,漏洞成因、影響範圍、POC與對抗方案有詳解: 謹防利用Redis未授權訪問漏洞入侵伺服器 RDB(Redis Database、全量保存 ...
  • 場景假設 A表(1000條數據)left join B表(1000條數據)。 嵌套迴圈(Nested-Loop Join) 極簡概括:顧名思義多層迴圈疊加,由於MySQL條數數量有限,所用for迴圈而不用while,在MySQL中就是多層for迴圈。 性能問題:MySQL使用這種作為join方式最簡 ...
  • 面試遇到過的Redis問題 Redis的數據類型 怎麼利用Redis解決超賣問題 緩存雪崩、緩存擊穿、緩存穿透 1. 什麼是Redis Redis就是一個非關係型資料庫(NoSQL),我們知道關係型資料庫MySQL,在MySQL里我們對於數據的增刪改查需要SQL語句(select * from... ...
  • 問題現象 ps -ef | grep yas 查看無yasom和yasagent進程,且在{資料庫安裝目錄}/om/{資料庫名稱}的目錄下沒有conf、data、log等目錄,確定資料庫不是用yasboot安裝,是用腳本安裝的 問題的風險及影響 非yasboot安裝,ycm無法完成托管,無法監控 問 ...
  • 1. 插入數據 1.1 insert 如果我們需要一次性往資料庫表中插入多條記錄,可以從以下三個方面進行優化。 insert into tb_test values(1,'tom'); insert into tb_test values(2,'cat'); insert into tb_test ...
  • 剛進公司,任務是接管PLM系統,但是還在給外包團隊開發,沒有代碼。無妨先看業務和資料庫,ok,業務看不懂,只能先看資料庫,資料庫沒有數據字典,這個系統沒有任何文檔產出......練手時發現資料庫類型是Oracle,面對百度不成問題,數據字典只能看前端然後去資料庫裡面一個個找著對應自己整理了,純折磨 ...
  • 引言 在數據驅動的世界中,企業正在尋求可靠且高性能的解決方案來管理其不斷增長的數據需求。本系列博客從一個重視數據安全和合規性的 B2C 金融科技客戶的角度來討論雲上雲下混合部署的情況下如何利用亞馬遜雲科技雲原生服務、開源社區產品以及第三方工具構建無伺服器數據倉庫的解耦方法。 Apache Dolph ...
  • 之前寫過一篇文章MySQL如何獲取binlog的開始時間和結束時間[1],文章裡面介紹瞭如何獲取MySQL資料庫二進位日誌(binlog)的開始時間與結束時間的一些方法。實際應用當中,我們可能還會遇到效率/性能方面的問題。最近對這個問題做了一些研究,這裡就介紹一下如何快速獲取MySQL二進位日誌(b ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...