暂无图片
暂无图片
暂无图片
openGauss内核开发
2022-06-01 16:42:24 2030
简介:主要介绍如何进行openGauss内核开发
openGauss内核分析(七):SQL by pass & 经典执行器
执行引擎一般负责查询的执行,执行引擎在SQL执行栈中起到接收优化器生成的执行计划Plan、并对通过存储引擎提供的数据读写接口,实现对数据进行计算得到查询的结果集。在典型的OLTP场景中,简单查询占了很大一部分比例。这种查询的特征是只涉及单表和简单表达式的查询,因此为了加速这类查询,openGauss提出了SQLbypass框架,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加速简单查询的执行速度。
酷哥
2022-09-07
364 浏览
openGauss内核分析(四):查询重写
SQL语言是丰富多样的,非常的灵活,不同的开发人员依据经验的不同,手写的SQL语句也是各式各样,另外还可以通过工具自动生成。SQL语言是一种描述性语言,数据库的使用者只是描述了想要的结果,而不关心数据的具体获取方式,输入数据库的SQL语言很难做到是以最优形式表示的,往往隐含了一些冗余信息,这些信息可以被挖掘用来生成更加高效的SQL语句。查询重写就是把用户输入的SQL语句转换为更高效的等价SQL,查询重写遵循两个基本原则。查询重写是基于规则的逻辑优化。
酷哥
2022-06-16
611 浏览
openGauss内核分析(三):SQL解析
openGauss在pgparsequery中调用rawparser函数对用户输入的SQL命令进行词法分析和语法分析,生成语法树添加到链表parsetreelist中。完成语法分析后,对于parsetreelist中的每一颗语法树parsetree,会调用parseyze函数进行语义分析,根据SQL命令的不同,执行对应的入口函数,最终生成查询树。openGauss使用flex工具进行词法分析。在scan.l中处理“标识符”时,会到关键字列表中进行匹配,如果一个标识符匹配到关键字,则认为是关键字,否则才是标识符,即关键字优先.以“selecta,bfromitem”为例说明词法分析结果。openGauss中定义了bison工具能够识别的语法文件gram.y,根据SQL语言的不同定义了一系列表达Statement的结构体,用来保存语法分析结果。havingClause0x0,windowClause0x0,withClause0x0,valuesLists0
酷哥
2022-06-09
322 浏览
openGauss内核分析(一):openGauss 多线程架构启动过程详解
openGauss数据库自2020年6月30日开源以来,吸引了众多内核开发者的关注。那么openGauss的多线程是如何启动的,一条SQL语句在SQL引擎,执行引擎和存储引擎的执行过程是怎样的,酷哥做了一些总结,第一期内容主要分析openGauss多线程架构启动过程。与进程相比,它是一种非常“节俭”的多任务操作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间。入口函数PostmasterMain,主要负责内存、全局信息、信号、线程池等的初始化,启动辅助线程并监控线程状态,循环接收新的连接。入口函数StartupProcessMain,数据库启动时Postmaster主线程拉起的第一个子线程,主要完成数据库的日志REDO(重做)操作,进行数据库的恢复。如果没有指定额外启动选项,程序进入PostmasterMain函数,开始一系列服务器端的正常初始化工
酷哥
2022-06-01
435 浏览
openGauss内核分析(二):简单查询的执行
上一期酷哥分析了openGauss数据库的启动过程,包括主线程,辅助线程及业务处理线程的启动过程,这一期主要分析简单查询语句在业务处理线程Postgres上的执行流程,并介绍如何利用gdb梳理代码逻辑。SQL引擎是数据库系统的入口,执行用户简单查询的入口函数是execsimplequery。通常可以把SQL引擎分成SQL解析和查询优化两个主要的模块,SQL引擎对输入的SQL语言进行词法分析、语法分析、语义分析,从而生成逻辑执行计划,逻辑执行计划经过代数优化和代价优化之后,产生物理执行计划。在SQL引擎将用户的查询解析优化成可执行的计划之后,数据库进入查询执行阶段。执行器基于执行计划对相关数据进行提取、运算、更新、删除等操作,以达到用户查询想要实现的目的。以调试select语句为例,gdbattach进程号,在execsimplequery打上断点,执行select语句即可开始调试
酷哥
2022-06-01
298 浏览
专栏作者
暂无图片
近期活动
数据库服务团队技术分享第十二期-数据库安全进行到底 (安全生产系列)
04/09 20:00 0人报名
【开始报名啦】4月12日 TiDB社区活动在南京!传统技术栈替换和 AI 浪潮正当时,面向未来的国产数据库怎么选择?
04/12 14:00 0人报名
Apache Cloudberry™ (Incubating) Meetup · 杭州
04/19 14:00 1人报名