文章分类 -  openGauss源码解析

openGauss数据库是华为公司在深度融合技术应用于数据库领域多年经验的基础上,结合企业级场景要求,推出的新一代企业级开源数据库。本文将从各方面对该openGauss数据库源码进行详细介绍。
摘要:openGauss源码解析:SQL引擎源解析(20)3. 选择算子在种群生成之后,就可以进行代际遗传优化,从种群中随机选择两个染色做交叉操作,这样就能产生一个新的染色体。由于种群中的染色体已经按照适应度排序了,对来说适应度越低(代价越低)的染色体越好,因为希望将更好的染色体遗传下去,所以需要在选择父 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(19)然后对每条染色体计算适应度(worth),计算适应度的过程实际上就是根据染色体的基因编码顺序产生连接树,并对连接树求代价的过程。在openGauss数据库中,每个染色体都默认使用的是左深树,因此每个染色体的基因编码确定后,它的连接树也就随之确定了, 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(18)2. 种群初始化在使用遗传算法前,可以利用参数Gepo_threshold的数值来调整触发的条件。为了方便代码解读,将这个边界条件降低至4(即RelOptInfo数量或者说基表数量为4的时候就尝试使用遗传算法)。下面在解读代码的过程中,以t1,t2 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(17)1. 文件结构遗传算法作为相对独立的优化器模块,拥有自己的一套文件目录结构,见表6-17。表6-17 优化器文件目录结构说明文件名称功能说明geqo_copy.cpp复制基因函数,即gepo_copy函数geqo_cx.cpp循环交叉(CYCLE 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(16)6.3.5 遗传算法遗传算法(genetic algorithm,GA)作为进化算法的一种,借鉴了达尔文生物进化论中的自然选择以及遗传学机理。通过模拟大自然中“物竞天择,适者生存”这种进化过程来生成最优的个体。当生成一定数量的原始个体后,可以通过基 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(4) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(15)(2) match_unsorted_outer函数。match_unsorted_outer函数大部分整体代码思路和sort_inner_and_outer一致,最主要的一点不同是sort_inner_and_outer是根据条件去推断出内外表的 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(2) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(14)(2) 合法连接。由于RelOptInfo会导致搜索空间膨胀,如果上来就对两个RelOptInfo进行最终的合法连接检查会导致搜索时间过长,这也就是为什么要提前做初步检查和精确检查的原因,可以减少搜索时间其实达到了“剪枝”的效果。对于合法连接,主要 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(13)2. 路径生成前面已经介绍了路径生成中使用的动态规划方法,并且介绍了在累积过程中如何生成当前层的RelOptInfo。对于生成当前层的RelOptInfo会面临几个问题:一是需要判断两个RelOptInfo是否可以进行连接,二是生成物理连接路径。目 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(4) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(3) 7.1.3 代码概览 执行器在项目中的源代码路径为:src/gausskernel/runtime。下面是执行器的源码目录。 1) 执行器源码目录 执行器源码目录如表7-1所示。 表7-1 执行器源码目录 模块 功能 Makefile 编译脚本 code 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(11) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(4)7.2 执行流程整个执行器的执行流程主要包括了策略选择模块Portal、执行组件executor和ProcessUtility,如图7-3所示。下面逐个进行介绍。图7-3 执行器总体执行流程7.2.1 Portal策略选择模块Portal是执行SQL语句的 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(5)7.2.2 ProcessUtility模块除了DML之外的所有查询,都通过ProcessUtility模块来执行,包括了各类DDL语句、事务相关语句、游标相关语句等。DDL查询的上层函数调用为exec_simple_query函数,其中PortalSta 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(6)7.3 执行算子执行算子模块包含多种计划执行算子,算子类型如表7-4所示,是计划执行的独立单元,用于实现具体的计划动作。执行计划包含4类算子,分别是控制算子、扫描算子、物化算子和连接算子,如表7-4所示。这些算子统一使用节点(node)表示,具有统一的接口 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(7)2. Append算子Append算子对应的代码源文件是“nodeAppend.cpp”,用于处理包含一个或多个子计划的链表。Append遍历子计划链表逐个执行子计划,当子计划返回全部结果后,迭代执行下一个子计划。Append算子通常用于SQL中的集合操作 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(8)4. BitmapOr算子BitmapOr节点同BitmapAnd节点类似,主要差异是BitmapAnd对子计划结果做求交计算(tbm_intersect),而BitmapOr是对子计划结果做并集计算(tbm_union)。BitmapOr算子提供的主要函 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(9)7.3.2 扫描算子扫描算子用于表、结果集、链表子查询等结果遍历,每次获取一条元组作为上层节点的输入。控制算子中的BitmapAnd/BitmapOr函数所需的位图与扫描算子(索引扫描算子)密切相关。主要包括顺序扫描(SeqScan)、索引扫描(Index 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(8) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(10)2. IndexScan算子IndexScan算子是索引索引扫描算子,对应IndexScan计划节点,相关的代码源文件是“nodeIndexScan.cpp”文件。如果过滤条件涉及索引,查询计划对表的扫描使用IndexScan算子,利用索引加速元组获取。 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(6) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(11)4. BitmapHeapScan算子BitmapHeapSan算子通过位图(BitmapIndexScan的输出)获取实际的元组,对应的代码源文件是“BitmapHeap.cpp”。算子对应的主要函数如表7-15所示。表7-15 BitmapHeapS 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(12)6.3.4 动态规划目前openGauss已经完成了基于规则的查询重写优化和逻辑分解优化,并且已经生成各个基表的物理路径。基表的物理路径仅仅是优化器规划中很小的一部分,现在openGauss将进入优化器优化的另一个重要的工作,即生成Join连接路径 阅读全文
posted @ 2024-04-30 10:34 openGauss-bot 阅读(7) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(7)6.3 查询优化openGauss数据库的查询优化过程功能比较明晰,从源代码组织的角度来看,相关代码分布在不同的目录下,如表6-6所示。表6-6 查询优化模块说明模块目录说明查询重写src/gausskernel/optimizer/prep主要包括 阅读全文
posted @ 2024-04-30 10:11 openGauss-bot 阅读(7) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(8)6.3.2 统计信息和代价估算在不同数据分布下,相同查询计划的执行效率可能显著不同。因此,在选择计划时还应充分考虑数据分布对计划的影响。与通用逻辑优化不同,物理优化将计划的优化建立在数据之上,并通过最小化数据操作代价来提升性能。从功能上来看,open 阅读全文
posted @ 2024-04-30 10:11 openGauss-bot 阅读(7) 评论(0) 推荐(0) 编辑