- 博客(656)
- 问答 (1)
- 收藏
- 关注
原创 CloudberryDB | 第4期 | 角色管理实现机制解读
判断角色是否存在,若不存在则提示报错推出,否则进行相应的权限判断执行者是否有权限更改该角色的属性;角色是拥有数据库对象和权限的实体,在不同环境中角色可以是一个用户、一个组或者两者都有,本节介绍角色的创建、修改、删除和权限授予与回收。而创建角色和组时,若没有角色属性参数设置,则。删除所有涉及删除角色的元组,当然还会删除该角色在。,那么被加入的成员角色还可以将其他角色加入父角色。链表的角色,检查该角色是否存在,若不存在则根据。,依次提取要修改的角色属性;也可以调整角色的成员关系,结构体中的。
2025-03-14 22:12:13
809
原创 CloudBerryDB | 第3期 | 词法解析与语法解析(2)
CloudberryDB |第3期| 词法解析与语法解析(2)本文接上文,介绍词法解析逻辑的流程。1、词法解析逻辑1)kwlist.h通过gen_keywordlist.pl脚本生成kwlist_d.h头文件,里面定义了ScanKeywords_kw_string[]、ScanKeywords_kw_offsets[]数组,并定义了ScanKeywords结构体。其中ScanKeywords_...
2025-03-01 22:48:40
565
原创 CloudBerryDB | 第3期 | 词法解析与语法解析(1)
CloudberryDB |第3期| 词法解析与语法解析(1)CloudberryDB基于PostgreSQL,这块原理和PG一样,都是利用flex和yacc进行词法解析和语法解析生成语法树,再经语义分析生成逻辑执行计划,以供优化器进行优化生成最终的物理执行计划。1、词法分析词法分析主要识别一个SQL中的关键字、标识符、操作符、常量和终结符,划分成多个不同的token。名字词性说明关键字key...
2025-02-23 22:20:12
854
原创 CloudBerryDB | 第2期 | 行列混合存储引擎
CloudBerryDB |第2期|行列混合存储引擎CloudBerryDB(Greenplum的接棒者)的行列混合存储引擎PAX多种encoding/compress算法、MVCC、XLOG以及VACUUM(目前正在做),也支持统计信息和稀疏过滤,另外还支持向量化执行器。当然它的向量化执行器目前还为开源,据hashdata老师讲,PAX计划明年Q1开源。这里的统计信息大致指一个block里...
2025-02-02 20:55:19
850
原创 PostgreSQL图插件AGE
PostgreSQL图插件AGEApache AGE是PostgreSQL的一个图插件,作为Apache的一个顶级项目目前备受关注。AGE是A Graph Extension的缩写,支持openCypher语言,本文关注下它的基础架构。1、AGE中涉及的几个系统表AGE中涉及几个重要的系统表:1)ag_graph,用于存储所有的图schema,相当于每创建一个图都有一个图名字,这个系统表就存储所有...
2025-01-25 13:01:44
391
原创 数据库执行引擎性能黑科技
数据库执行引擎性能黑科技现在业界OLAP数据库中,包括商业数据库和开源数据库,都在执行引擎这块做了很多黑科技,使得执行性能大大提高。比如向量化执行引擎、push-based pipeline执行引擎、JIT和向量化结合等等,本文我们不关注整体的实现以及NVM、GPU、FPGA等新硬件方面的提速,而关注具体性能黑科技的细节。1、clickhouse中向量化执行引擎中使用的手段1)大量使用instri...
2025-01-01 17:05:03
586
转载 阵容发布&议程官宣!第七届中国PostgreSQL数据库生态大会 开票倒计时!
会议信息时间:2025年1月4日地点:上海·南京路·上海国际饭店9楼国际厅形式:现场参会,无线上直播嘉宾阵容详细议程免费注册会议下方扫码常见问题&参会指南01 为何没有直播?我们认为,现场交流的独特价值无法通过线上形式替代。因此,在筹备过程中,我们将重点放在优化现场体验上,确保与会者能参与4个专题研讨会,并与其他专业人士建立宝贵的联系。02 报名...
2024-12-31 20:03:07
53
原创 GPDB EXPLAIN ANALYZ比直接执行SQL慢?
自从GPDB闭源后,HashData接手举起了GPDB开源的大旗,由GPDB衍生而来的CloudberryDB于近期加入了Apache软件基金会孵化器,给GPDB开源社区带来了热度和活力。昨天在CC群里看到GPDB中EXPLAIN ANALYZ比直接执行SQL慢的讨论。一般情况下,EXPLAIN ANALYZE由于不会向客户端输出元组,没有网络传输代价和IO转换代价(除非指定了SERIALIZE)...
2024-12-01 21:46:06
696
原创 PgSQL即时编译JIT | 第1期 | JIT初识
PgSQL即时编译JIT | 第1期 | JIT初识JIT是Just-In-Time的缩写,也就是说程序在执行的时候生成可以执行的代码,然后执行它。在介绍JIT之前,需要说下两种执行方式:解释执行和编译执行。其中解释执行是通过解释器,将代码逐条翻译成机器码;而编译执行是提前翻译成机器码。编译执行又分为动态编译和静态编译,其中动态编译指在运行时进行编译,与之相对的就是静态编译。JIT编译就是动态编译...
2024-11-17 18:34:12
821
原创 向量数据库|第2期|pgvectorscale
向量数据库|第2期|pgvectorscale大家都听说过pgvector,一个PostgreSQL存储和查询向量的扩展,是PG AI生态当之无愧的最受推崇的工具之一。pgvector向PG中添加了vector类型,以及各种搜索操作符和索引,使其拥有vectors和metadata的完整数据库能力。但他的HNSW索引有两个问题:1)需要将整个索引都放到内存,否则会变慢。索引成为整个应用的唯一瓶颈2...
2024-11-01 22:47:31
677
1
原创 GPDB HashAgg算法 | 第3期 | 版本6的spill溢出磁盘解秘
GPDB HashAgg算法 | 第3期 | 版本6的spill溢出磁盘解秘上期我们介绍了版本12的spill场景下hashagg如何进行操作,本期接着介绍下GPDB版本6是怎么操作的,它是否和版本12的原理一样?当然不一样,和版本12将不在当前hash表分组的元组溢出到磁盘不同,它是将当前hash表溢出到磁盘,然后再将元组插入到腾出空间的hash表中。1、hash表的管理Hash表的结构为Has...
2024-09-08 09:48:28
1128
原创 PgSQL基础知识 | 第1期 | 聚合计算
PgSQL基础知识 | 第1期 | 聚合计算本期开始陆续学习PgSQL基础知识,本节全面介绍PgSQL中的聚合操作,尤其是PgSQL的聚合支持各种高级功能,比如filter、order by、distinct等功能。1、语法aggregate_name (expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_claus...
2024-09-01 07:28:07
612
原创 PgSQL HashAgg算法 | 第2期 | 版本12的spill溢出磁盘解秘
PgSQL HashAgg算法 | 第2期 | 版本12的spill溢出磁盘解秘HashAgg需要在内存中构建Hash表,以此来构建聚合分组;但是当数据量大到内存放不下时,就需要spill溢出到磁盘;构建好当前hash表并输出分组值后,再将磁盘上的spill文件中数据加载重新构建hash表并构建聚合分组。PgSQL在演进过程中,有两种spill磁盘方式,本期介绍如何spill并根据磁盘临时文件构建...
2024-08-18 21:50:37
1020
原创 CloudberryDB | 第1期 | 向量化引擎解读
CloudberryDB | 第1期 | 向量化引擎解读GreenPlum闭源带来了挑战,CloudberryDB接棒GreenPlum继续前行。CloudberryDB向量化引擎有开源计划,8月3号社区首期线下沙龙对向量化引擎从4个方面进行了介绍:首先是OLAP性能优化点有哪些:编译执行、向量化执行和并行。1)其中编译执行:将复杂运算在执行前编译成一个函数,优点有:分支预测代价低,执行速度快(因...
2024-08-11 13:49:56
429
原创 DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之Pipeline
DuckDB核心模块揭秘 | 第1期 | 向量化执行引擎之PipelineDuckDB是一款非常火的OLAP嵌入式数据库,性能超级棒。它分为多个组件:解析器、逻辑规划器、优化器、物理规划器、执行器以及事务和存储管理层。其中解析器原语PgSQL的解析器;逻辑规划器包含binder、plan generator,前者解析所有引用的schema中的对象的表达式,将其与列名和类型匹配,后者将binder生...
2024-07-27 23:02:33
1126
原创 PgSQL内核算法 | Hash Agg数据溢出写盘机制解析
PgSQL内核算法 | Hash Agg数据溢出写盘机制解析PgSQL进行Hash分组聚合时,针对数据的hash key(分组键)进行hash得到hash桶,同一个分组数据在同一桶上(为简化说明排除hash冲突场景)。当数据量比较大且比较分散造成分组数比较多时,构建的hash表在内存中放不下,就会将后续的不在当前分组中的数据写到磁盘临时文件。本文解析下写临时文件聚合的原理。1、Hash聚合流程1)...
2024-07-14 22:31:56
953
原创 openGauss - 向量化执行引擎算子HashAgg解读
openGauss - 向量化执行引擎算子HashAgg解读对于分组聚合来说,可以通过排序将待排序值按照大小排列起来,相同的值就紧密连在一起,然后依次遍历,遇到不相同的值就得到一个分组。另一种方式是通过Hash来完成,将所有值都构建到hash表中,同一个桶的值即为一个分组(hash冲突的场景忽略)。openGauss的向量化执行引擎如何通过Hash来实现聚合?1、HashAggRunner类Has...
2024-07-07 15:17:53
482
原创 CloudberryDB什么条件下使用Runtime Filter
CloudberryDB什么条件下使用Runtime Filter前文讲述了CloudberryDB的Runtime Filter两种实现方法。Hash Join时,将内表的值构建hash表的同时将其再构建到布隆过滤器中,然后将该过滤器传递给左子树的RuntimeFilter算子或者下沉到SeqScan算子,但是布隆过滤器的生成、传输及检查会引入额外开销,若不加节制滥用,则可能导致性能下降。Clo...
2024-06-30 15:23:54
232
原创 国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter
国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件,对与后期维护、升级等都变得非常困难。有幸HashData开源了基于GP衍生版本CloudberryDB版本,对国...
2024-06-23 21:33:45
478
转载 PostgreSQL使用Linux cgroup2控制资源消耗
PostgreSQL使用Linux cgroup2控制资源消耗多租户和共host是一个挑战性问题。运行多个PG实例可以帮助减少内部竞争点(可伸缩性问题)。然而,一个租户的load可能会影响其他tenets,即所谓的“Noisy Neighbor”效应。幸运的是Linux允许用户通过每个程序使用cgroups来控制资源消耗。Cgroup2替代了cgroup1,处理了版本1几乎所有的限制。Linux的...
2024-06-10 16:24:09
118
原创 PgSQL技术内幕 - psql与服务端连接与交互机制
PgSQL技术内幕 - 客户端psql与服务端连接与交互机制简单来说,PgSQL的psql客户端向服务端发起连接请求,服务端接收到请求后,fork出一个子进程,之后由该子进程和客户端进行交互,处理客户端的SQL等,并将结果返回给客户端。那么,他是如何做到客户端和服务端子进程进行交互呢?服务端怎么做到和多个客户端交互呢?1、客户端如何连接psql客户端连接及发送SQL命令过程如下图所示:1)通过pa...
2024-06-08 23:40:50
561
原创 国产数据库 - 架构设计 - 初识Doris
国产数据库 - 架构设计 - 初识DorisDoris是一款基于MPP架构的分析型数据库。整体架构很简单,只有两类进程FE和BE。其中FE(Frontend)主要负责用户请求的接入、查询解析规划、元数据管理和节点管理相关工作;BE(Backend)主要负责数据存储、查询计划的执行。1、架构业界比较有名另一款的MPP分布式数据库GreenPlum,对照其来说,这里的FE和GPDB的Master相对应...
2024-05-29 22:48:44
1045
原创 PgSQL内核机制 - 算子执行统计元组个数
PgSQL内核机制 - 算子执行统计元组个数我们在执行explain analyze观察执行计划执行情况时,时常通过每个算子实际执行结果来分析SQL的执行,其中有一项“rows = XXX”表示执行的行数(这里姑且先认为是执行的真实行数)。但有些场景下,比如MergeJoin,如下:可以看到内表t1的SeqScan算子扫描出8行记录,而排序Sort算子仅4个,难道不是应该8个元组都进行排序吗?那我...
2024-05-25 22:58:31
489
原创 openGauss的BatchStore和Batchsortstate为什么仅ForwardScanDirection取数据
openGauss - 内核原理 - BatchStore和Batchsortstate为什么仅ForwardScanDirection取数据openGauss的普通执行引起从Tuplestorestate(物化)和Tuplesortstate(排序)取数据时,会有方向,即ForwardScanDirection:从前向后依次取;BackwardScanDirection:从后向前依次取。但是,在...
2024-05-19 22:13:31
958
原创 第一章 buffer cache管理--1 介绍
PostgreSQL通过自己的buffer和操作系统内核缓冲来缓冲数据,即在内存中存储着两份数据,分别在shared buffer和内核buffer中。上面的方法是最简单的,还有其他方式。表t1的索引t1_pkey占cache的37.8%,占表总大小的90.2%,缓存中读取了索引中90%多的数据。默认情况下,pg_prewarm会将内存中的块链表存储到磁盘,重启时自动读取这个链表中页号,并把这些对于页读取到cache。注意,这种方式统计的信息包含系统表的信息,所以如果统计某个表的命中率,需要通过方法2。
2024-05-08 22:26:59
170
原创 湖仓一体 - Apache Arrow的那些事
湖仓一体 - Apache Arrow的那些事Arrow是高性能列式内存格式标准。它的优势:高效计算:所有列存的通用优势,CPU缓存友好、SIMD向量化计算友好等;零序列化/反序列化:arrow的任何数据结构都是一段连续的内存,在跨进程/跨及其传输数据时直接发送/接收整段内存即可,不需要序列化和反序列化;完善的数据类型和生态;支持跨语言跨系统互操作。Arrow代码库分为3个层次:core层,提供数...
2024-05-05 12:46:58
1001
原创 openGauss - 向量化执行引擎 - distinct分组聚合的实现
openGauss - 向量化执行引擎 - distinct分组聚合的实现openGauss向量化执行引擎中分组聚合有两种实现方式:排序和hash。本文介绍排序实现机制下的distinct分组聚合如何实现。分组聚合也分为两种使用方式:普通group by和grouping sets等分组集,其中普通group by就是每次查询生成一个分组的聚合;而grouping sets、cube或者rollu...
2024-04-27 19:09:24
916
原创 GPDB技术内幕 - SEMI JOIN浅析
GPDB技术内幕 - SEMI JOIN浅析SEMI JOIN顾名思义,半连接,相对于join字段来说,针对外表的一行记录,内表只要有一条满足,就输出外表记录。注意,这里是仅输出外表记录。GPDB中有几种实现方式,本文我们简单聊聊。从代码中,我们看到SEMI JOIN的类型有3类:1、JOIN_SEMI这是普通实现方式。针对nestloop join、merge join、hash join的in...
2024-04-12 22:41:19
991
转载 PgSQL技术内幕 - PostgreSQL查询处理阶段综述
PgSQL技术内幕 - PostgreSQL查询处理阶段综述查询发送到PgSQL后在后台进程会经历几个处理阶段,每个阶段都有不同职责,保证用户在尽可能短的时间内收到正确的响应。这个过程相当复杂,本文概述每个查询处理阶段的作用和意义。5个查询处理阶段解析器PgSQL使用lex(Flex lexical analyzer)和yacc(bison parser)工具创建解析器。通常通过写一个正则表达式定...
2024-04-05 22:35:44
106
原创 PgSQL - 内核插件 - pg_dirtyread
PgSQL - 内核插件- pg_dirtyread表中删除了记录,并且没有进行vacuum,此时可以通过pg_dirtyread扩展读取死记录。1、使用方法CREATE EXTENSION pg_dirtyread;SELECT * FROM pg_dirtyread('tablename') AS t(col1 type1, col2 type2, ...);安装插件后,通过pg_dirt...
2024-03-31 22:20:43
514
原创 GPDB - 内核特性 - 分区表如何处理表名超长
GPDB - 内核特性 - 分区表如何处理表名超长GPDB分区表创建时有可能表名已存在,此时报错退出。但当分区表名超过64字符时,会进行截断,仅保留前63字符,此时就可能出现分区表名不同,截断后创建的分区表名相同从而创建失败的情况;还会出现分区表父表创建成功,但分区子表名创建失败,报表名已存在等错误导致创建失败。本文基于GreenPlum7.0分区表经典语法详细分析分区表名及分区子表名生成机制。1...
2024-03-23 21:48:41
435
原创 PgSQL技术内幕 - 优化器如何估算行数
PgSQL技术内幕 - 优化器如何估算行数PgSQL优化器根据统计信息估算执行计划路径的代价,从而选择出最优的执行计划。而这些统计信息来自pg_statistic,当然这个系统表是由ANALYZE或者VACUUM进行样本采集而来。关于该系统表的介绍详见:PgSQL技术内幕-Analyze做的那些事-pg_statistic系统表在理解优化器估算行数原理前,先了解几个概念。1、MCVMCV即Most...
2024-03-13 22:26:25
991
2
空空如也
innodb插入意向锁如何使用
2015-06-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人