文章分类 - openGauss源码解析
openGauss数据库是华为公司在深度融合技术应用于数据库领域多年经验的基础上,结合企业级场景要求,推出的新一代企业级开源数据库。本文将从各方面对该openGauss数据库源码进行详细介绍。
摘要:openGauss源码解析:AI技术(11)4. 调优模式使用示例tune模式支持多种算法,包括基于强化学习的DDPG算法、基于全局搜索算法(global optimization algorithm,GOP)算法的贝叶斯优化算法以及PSO。与tune模式相关的配置项如下。(1) tune_stra
阅读全文
摘要:openGauss源码解析:AI技术(12)8.2.6 对X-Tuner的二次开发在8.2.3 X-Tuner的调优策略小节和8.2.5使用示例小节中已经展示了X-Tuner各个模块的作用,从结构上看,可以针对下述几个部分进行扩展。(1) benchmark模块:可以通过benchmark/temp
阅读全文
摘要:openGauss源码解析:执行器解析(46)7.6.4 连接算子1. VecNestLoop算子VecNestLoop算子对应的主要数据结构是VecNestLoopState,VecNestLoopState继承于NestLoopState。具体定义代码如下:struct VecNestLoopS
阅读全文
摘要:openGauss源码解析:执行器解析(45)7. VecSetOp算子VecSetOp算子用于处理EXECEPT和INTERSECT集合操作。一般一个VecSetOp算子中只能处理两个集合之间的集合操作,对于多个集合之间的集合操作,需要多个SetOp实现。VecSetOp算子对应的代码源文件是“v
阅读全文
摘要:openGauss源码解析:执行器解析(34)7.5.3 VecHashJoinCodeGen类VecHashAggCodeGen类的定义在“codegen/vechashjoincodegen.h”文件中,接口说明如表7-35所示。表7-35 VecHashAggCodeGen接口汇总接口名称接口
阅读全文
摘要:openGauss源码解析:执行器解析(33)7.5.2 VecHashAggCodeGen类对于hash聚合来说,数据库会根据“GROUP BY”字段后面的值算出哈希值,并根据前面使用的聚合函数在内存中维护对应的列表。VecHashAggCodeGen类的接口实现在“codegen/vechash
阅读全文
摘要:openGauss源码解析:执行器解析(32)举例来说,以ExecCStoreScan函数中处理qual表达式来说明,以本次查询所生成的查询计划树为输入,编译得到机器码。因此实现调用需要做到如下两点。(1) 结合所实现的函数接口,依据当前查询计划树,生成对应的IR函数。如提供了ExecVecQual
阅读全文
摘要:openGauss源码解析:执行器解析(31) GsCodeGen提供LLVM环境处理函数和module函数,以及处理IR的函数。另一方面,为了处理算子函数功能,将每个算子涉及的各个操作符封装在ForeigenScanCodeGen类中,接口定义在“codegen/foreignscancodege
阅读全文
摘要:openGauss源码解析:执行器解析(30) openGauss GodeGen的整体编译流程如图7-25所示。 图7-25 openGauss CodeGen编译执行流程 数据库启动后,首先对LLVM初始化,其中CodeGenProcessInitialize函数对LLVM的环境进行初始化,包括
阅读全文
摘要:openGauss源码解析:执行器解析(29)7.5 编译执行为了提高SQL的执行速度,解决传统数据处理引擎条件逻辑冗余的问题,openGauss为执行表达式引入了CodeGen技术,其核心思想是为具体的查询生成定制化的机器码代替通用的函数实现,并尽可能地将数据存储在CPU寄存器中。openGaus
阅读全文
摘要:openGauss源码解析:执行器解析(35)7.5.4 VecSortCodeGen类VecSortCodeGen是为sort节点LLVM化定义的一个类,类中的接口声明在“codegen/vecsortcodegen.h”文件中,接口描述如表7-36所示。表7-36 VecSortCodeGen接
阅读全文
摘要:openGauss源码解析:执行器解析(36)7.6 向量化引擎传统的行执行引擎大多采用一次一元组的执行模式,这样在执行过程中CPU大部分时间并没有用来处理数据,更多的是在遍历执行树,就会导致CPU的有效利用率较低。而在面对OLAP场景巨量的函数调用次数,需要巨大的开销。为了解决这一问题,openG
阅读全文
摘要:openGauss源码解析:执行器解析(37)2. VectorModifyTable算子VecModifyTable算子用于处理INSERT、UPDATE、DELETE操作,对应的代码源文件是“vecmodifytable.cpp”;对应的主要数据结构是VecModifyTableState,Ve
阅读全文
摘要:openGauss源码解析:执行器解析(38)7.6.2 扫描算子1. CStoreScan算子CStoreScan算子用于扫描基础表,按顺序扫描基础表,对应的代码源文件是“veccstore.cpp”;CStoreScan算子对应的主要数据结构是CStoreScanState,CStoreScan
阅读全文
摘要:openGauss源码解析:执行器解析(40)4. VecSubqueryScan算子VecSubqueryScan算子将子计划作为扫描对象,实际执行中会转换为调用子节点计划,对应的代码源文件是vecsubqueryscan.cpp;VecSubqueryScan算子对应的主要数据结构是VecSub
阅读全文
摘要:openGauss源码解析:执行器解析(41)7.6.3 物化算子1. VecMaterial算子VecMaterial算子能够缓存需要多次重复扫描的子节点结果,有助于减少执行中的扫描代价。VecMaterial算子对应的代码源文件是“vecmaterial.cpp”。VecMaterial算子对应
阅读全文
摘要:openGauss源码解析:执行器解析(42)2. VecSort算子VecSort算子用于缓存下层节点返回的所有结果元组并进行排序,对于结果元组较多时,会使用临时文件进行存储,并使用外排序进行排序操作。VecSort算子对应的代码源文件是“vecsort.cpp”,VecSort算子对应的主要数据
阅读全文
摘要:openGauss源码解析:执行器解析(43)3. VecLimit算子VecLimit算子用于处理Limit子句,对应的代码源文件是“veclimit.cpp”。VecLimit算子对应的主要数据结构是VecLimitState,VecLimitState继承于LimitState。具体定义代码如
阅读全文
摘要:openGauss源码解析:执行器解析(44)5. VecAggregation算子VecAggregation算子用于处理含有聚集函数的操作,将同一分组下的多个元组合并成一个聚集结果元组。VecAggregation算子对应的代码源文件是“vecagg.cpp”。VecAggregation算子对
阅读全文
摘要:openGauss源码解析:执行器解析(19)7.3.4 连接算子连接算子用于处理表关联,openGauss支持12种连接类型(inner join、left join、right join、full join、semi join、anti join等),提供了3种连接算子:hash join、me
阅读全文