自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

帅的数说

专注于MySQL、MariaDB、Percona、PostgreSQL数据库及Aerospike等nosql数据库

  • 博客(656)
  • 问答 (1)
  • 收藏
  • 关注

原创 我的微信公众号二维码

2019-05-18 20:25:00 837

原创 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

原创 第四章 WAL 4.1 WAL文件

postgres备份与恢复第四章节WAL

2025-01-31 21:02:23 122

原创 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

原创 向量数据库|第1期|从零开始学习

从零开始学习向量数据库,一些基本概念以及索引

2024-10-04 16:54:03 1203

原创 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

原创 第三章 crash recovery机制

PgSQL崩溃恢复机制

2024-05-12 21:02:20 183

原创 第二章 checkpoint机制 - 原理

checkpoint内核原理

2024-05-11 21:34:07 133

原创 第一章 buffer cache管理 - 2 原理机制

PostgreSQL的buffer cache机制

2024-05-10 22:27:49 380

原创 第二章 checkpoint机制 - 介绍

PostgreSQL的checkpoint介绍

2024-05-10 21:57:53 139

原创 第一章 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

原创 PostgreSQL备份恢复与复制

学习本专栏能达到的效果:了解PG备份恢复与复制使用方法的同时,从代码层次深入理解其原理机制。

2024-05-08 22:02:20 131

原创 湖仓一体 - 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

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除