详解GaussDB(DWS)中的行执行引擎

gaussdb,dws · 浏览次数 : 0

小编点评

**行执行引擎详解** **一、概述** GaussDB(DWS)包含三大引擎,一是SQL执行引擎,二是执行引擎,三是存储引擎。其中,执行引擎包含行执行引擎和列执行引擎,负责将数据从存储引擎中读取出来并进行计算处理后返回给客户端。 **二、行执行引擎** **2.1框架** 行执行引擎的框架包括以下部分: * 算子:执行树上的每个节点。 * 连接算子:连接表之间的关系。 * 物化算子:可缓存的元组节点。 * 控制算子:处理特殊情况的节点。 **2.2算子类型** * 扫描算子:扫描表中的数据。 * 连接算子:连接表之间的关系。 * 物化算子:用于缓存元组的节点。 * 控制算子:处理特殊情况的节点。 **三、执行框架总结** * 行执行引擎在整个数据库系统中的位置。 * 框架包括多个算子,负责执行 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)行执行引擎在整个数据库系统中的位置;
  • 介绍了行执行引擎的框架;
  • 最后介绍了一些常见和常用的行执行引擎相关的算子。

 

点击关注,第一时间了解华为云新鲜技术~

 

与详解GaussDB(DWS)中的行执行引擎相似的内容:

详解GaussDB(DWS)中的行执行引擎

本文分享自华为云社区《GaussDB(DWS)行执行引擎详解》,作者:yd_227398895。 1.前言 GaussDB(DWS)包含三大引擎,一是SQL执行引擎,用来解析用户输入的SQL语句,生成执行计划,供执行引擎来执行;二是执行引擎,其中包含了行执行引擎和列执行引擎,执行引擎即查询的执行者,

详解数仓的向量化执行引擎

本文分享自华为云社区《GaussDB(DWS)向量化执行引擎详解》,作者: yd_212508532。 前言 适用版本:【基线功能】 传统的行执行引擎大多采用一次一元组的执行模式,这样在执行过程中CPU大部分时间并没有用来处理数据,更多的是在遍历执行树,就会导致CPU的有效利用率较低。而在面对OLA

理论+示例,详解GaussDB(DWS)资源管理

摘要:合理地管理和分配系统资源,是保证数据库系统稳定高效运行的关键。 本文分享自华为云社区《GaussDB(DWS)资源管理能力介绍与应用示例》,作者: 门前一棵葡萄树 。 一、资源管理能力 1.1 概述 数据库运行过程中使用的公共资源包含:系统资源(CPU、内存、网络等)和数据库共享资源(锁、计数

一文详解数仓GaussDB(DWS) 函数出参带出方式

摘要:本文主要讲解DWS函数出参带出方式。 本文分享自华为云社区《GaussDB(DWS)功能 -- 函数出参 #【玩转PB级数仓GaussDB(DWS)】》,作者:譡里个檔 。 DWS的PL/pgSQL函数/存储过程中有一个特殊的语法PERFORM语法,用于执行语句但是丢弃执行结果的场景,常用于一

详解数仓中sequence的应用场景及优化

摘要:本文简单介绍sequence的使用场景及如何修改sequence的cache值提高性能。 本文分享自华为云社区《GaussDB(DWS)关于sequence的那些事》,作者:Arrow0lf 。 什么是sequence sequence,也称作序列,是用来产生唯一整数的数据库对象。序列的值按照

详解集群级备份恢复:物理细粒度备份恢复

摘要:在实际使用过程中,数据库集群级的故障并非高概率事件,如何安全高效地帮助客户备份恢复一部分数据库元素,才是更加实际的需求,这也是细粒度备份恢复的意义所在。 本文分享自华为云社区《GaussDB(DWS)之物理细粒度备份恢复》,作者:我的橘子呢 。 1. 认识物理细粒度备份恢复 相对于集群级备份恢

一次性全讲透GaussDB(DWS)锁的问题

本文为大家详细的讲解GaussDB(DWS)中的各种锁及相关的使用场景等内容。

详解GaussDB(DWS)的query_band负载识别与应用

摘要:query_band是一个会话级别(session)的GUC参数,本身是字符串类型,支持任意形式字符组合。 本文分享自华为云社区《GaussDB(DWS)的query_band负载识别与应用》,作者:门前一棵葡萄树。 query_band概述 GaussDB(DWS)实现了基于query_ba

详解GaussDB(DWS)用户监控原理及应用

摘要:本文将聚焦于用户监控的原理及应用进行介绍。 本文分享自华为云社区《GaussDB(DWS)监控工具指南(二)用户级监控》,作者:幕后小黑爪 。 前言 资源监控是整个运维乃至整个产品生命周期重要的一环,事前及时语句发现故障,事后提供详实的数据用于追查定位问题。GaussDB(DWS)整个资源监控

一文详解GaussDB(DWS) 的并发管控和内存管控

摘要:DWS的负载管理分为两层,第一层为cn的全局并发控制,第二层为资源池级别的并发控制。 本文分享自华为云社区《GaussDB(DWS) 并发管控&内存管控》,作者: fighttingman。 1背景 这里将并发管控和内存管控写在一起,是因为内存管控实际是通过限制语句的并发达到内存管控的目的的。