在本年9月11号下午连续四个小时的学习中,印象最深刻的有以下几点知识\功能:
注:因为本人为学生小白(学生即小白),更多的是从感官和兴趣点方面去理解和学习,所以文章:技术性差,底子薄,抄录居多,若理解有错误,请各位读者 批评指正
主要源自朱金伟老师的演讲(传送门)
OpenGauss的执行引擎
关系数据库本身是对关系集合-Relation的运算操作,
执行引擎作为运算的控制逻辑主要是围绕着关系运算来实现的。
目前学习到的高斯的算子可以分成以下四类:
扫描算子-Scan Plan Node
扫描节点负责从底层数据来源抽取数据,数据来源可能是来自文件系统,也可能来自网络。
一般而言扫描节点都位于执行树的叶子节点,作为执行的数据输入来源;
典型代表SeqScan、IndexScan、SubQueryScan
关键特征:输入数据、叶子节点、表达式过滤
控制算子-Control Plan Node
一般不映射代数运算符,是为了执行器完成一些特殊的流程引入的算子;
例如Limit、RecursiveUnion、Union
关键特征:用于控制数据流程
物化算子-Materialize Plan Node
一般指算法要求,在做算子逻辑处理的时候,要求把下层的数据进行缓存处理
因为对于下层算子返回的数据量不可提前预知
因此需要在算法上考虑数据无法全部放置到内存的情况,例如Agg、Sort
关键特征:需要扫描所有数据之后才能返回
连接算子–Join Plan Node
是为了应对数据库中最常见的关联操作,根据处理算法和数据输入源的不同分成:MergeJoin,SortJoin,HashJoin。
关键特征:多个输入
openGauss 数据库事务
A-原子性-Atomicity:就是没有什么阻挡我们的操作——即要么全部完成,要么什么也没做!
C-一致性-Consistency:执行事务后,数据库仍需保持一致性的状态!
I-隔离性-Isolation:提交之前,没有结束的事务,不允许将其结果暴露出来!
D-持久性-Durability:当一个事务的结果提交后,系统保证该结果不会因以后的故障而丢失!
所以称为事务的ACID特性
openGauss 查询优化
过程如下:
- 统计信息-物理优化的依据,来源于表信息的统计;
- 行数估算-代价估算的基础,来源于基表统计信息的推算;
- 代价估算-根据关系的行数,推算出当前算子的执行代价;
- 路径搜索-依据若干算子的执行代价,通过求解最优路径进行路径搜索;
- 计划生成-将查询的执行路径转换成PlanTree能够输出给执行器做查询执行;
物理优化的技术点:
——统计信息模型-Table/Column-Level statistics
描述基表数据的特征包括唯一值、MCV值等,用于行数估算
——行数估算-Row Estimation
估算基表baserel、Join中间结果集joinrel、Aggregation中结果集大小,为代价估算做准备
——代价估算-Cost Estimation
根据数据量估算不同算子执行代价,各算子代价之和即为计划总代价
——路径搜索-Access Path Generation
通过求解路径最优算法(e.g. 动态规划、遗传算法)处理连接路径搜索过程,
以最小搜索空间找到最优连接路径
注:数字序号即为执行顺序