GaussDB技术解读——查询执行器

GaussDB技术解读——查询执行器
执行引擎负责查询的执行,在SQL执行栈中起到接受优化器生成的执行计划Plan、并对通过存储引擎提供的数据读写接口,实现对数据进行计算得到查询的结果集。

在分布式数据库中,执行引擎的范围还应包括节点间网络数据交换和传输的部分。

在这里插入图片描述

经典的执行模型:Tuple-At-A-Time模型(Volcano-Model)

数据库的执行是把查询的处理步骤抽象成独立的基础算子,然后由执行框架驱动算子迭代的方式执行,每个算子抽象成open()/next()/close()三种操作,上层算子通过嵌套调用下层的next()进行处理数据的返回,同样初始化的过程和结束过程也通过open()/close()嵌套调用,火山模型也是大多数传统数据库实现的执行模型。

计划节点

typedef struct Operator{    NodeTag    ...    /* input plan tree(s) */    struct Operator *lefttree;    struct Operator *righttree;    ...} Plan;

计划节点迭代执行

/* operator open 初始化操作 */State *exec_init_opr(state){    switch(nodeTag(state)) {       ...    }}/* operator next 执行操作 */Tuple *exec_process(plan){    switch(nodeTag(plan)) {        case Scan:  exec_scan();        case Join:  exec_join(); // process state->left & righttree{                exec_proc_node(state->lefttree);                exec_proc_node(state->righttree);}        case Agg:   exec_agg();         ...    }}
/* operator close 结束操作 */void exec_deinit (state){    switch(nodeTag(state)) {       ...    }}

关系数据库本身是对关系集合Relation的运算操作,执行引擎作为运算的控制逻辑主题夜视仪围绕着关系运算来实现的,在传统数据库实现理论中,算子的分类可以分成以下几类:

1、扫描类算子(Scan Plan Node)扫描节点负责从底层数据来源抽取数据,数据来源可能是来自文件系统,也可能来自网络(分布式查询)。

一般而言扫描节点都位于执行树的叶子节点,作为执行数的数据输入来源,典型代表SeqScan、IndexScan、SubQueryScan关键特征:输入数据、叶子节点、表达式过滤

2、控制类算子(Control Plan Node)控制算子一般不映射代数运算符,是为了执行器完成一些特殊的流程引入的算子,例如Limit、RecursiveUnion、Union

关键特征:用于控制数据流程

3、物化算子(Materialize Plan Node)物化算子一般指算法要求,在做算子逻辑处理的时候,要求把下层的数据进行缓存处理,因为对于下层算子返回的数据量不可提前预知,因此需要在算法上考虑数据无法全部放置到内存的情况,例如Agg、Sort关键特征:需要扫描所有数据之后才返回

4、连接算子(Join Plan Node)这类算子是为了应对数据库中最常见的关联操作,根据处理算法和数据输入源的不同分成以下几种关键特征:

多个输入传统执行模型的优缺点

优点:逻辑清晰,可读性可维护性较好

缺点:由于存在大量的function call, instruction cache missing因此运行效率低

posted @   MySQL成长之路  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2022-11-28 1、MySQLDUMP 常用数据导入导出
点击右上角即可分享
微信分享提示