自定义博客皮肤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数据库

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

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

2019-05-18 20:25:00 790

原创 PgSQL内核算法 | Hash Agg数据溢出写盘机制解析

PgSQL内核算法 | Hash Agg数据溢出写盘机制解析PgSQL进行Hash分组聚合时,针对数据的hash key(分组键)进行hash得到hash桶,同一个分组数据在同一桶上(为简化说明排除hash冲突场景)。当数据量比较大且比较分散造成分组数比较多时,构建的hash表在内存中放不下,就会将后续的不在当前分组中的数据写到磁盘临时文件。本文解析下写临时文件聚合的原理。1、Hash聚合流程1)...

2024-07-14 22:31:56 782

原创 openGauss - 向量化执行引擎算子HashAgg解读

openGauss - 向量化执行引擎算子HashAgg解读对于分组聚合来说,可以通过排序将待排序值按照大小排列起来,相同的值就紧密连在一起,然后依次遍历,遇到不相同的值就得到一个分组。另一种方式是通过Hash来完成,将所有值都构建到hash表中,同一个桶的值即为一个分组(hash冲突的场景忽略)。openGauss的向量化执行引擎如何通过Hash来实现聚合?1、HashAggRunner类Has...

2024-07-07 15:17:53 353

原创 CloudberryDB什么条件下使用Runtime Filter

CloudberryDB什么条件下使用Runtime Filter前文讲述了CloudberryDB的Runtime Filter两种实现方法。Hash Join时,将内表的值构建hash表的同时将其再构建到布隆过滤器中,然后将该过滤器传递给左子树的RuntimeFilter算子或者下沉到SeqScan算子,但是布隆过滤器的生成、传输及检查会引入额外开销,若不加节制滥用,则可能导致性能下降。Clo...

2024-06-30 15:23:54 165

原创 国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件,对与后期维护、升级等都变得非常困难。有幸HashData开源了基于GP衍生版本CloudberryDB版本,对国...

2024-06-23 21:33:45 387

转载 PostgreSQL使用Linux cgroup2控制资源消耗

PostgreSQL使用Linux cgroup2控制资源消耗多租户和共host是一个挑战性问题。运行多个PG实例可以帮助减少内部竞争点(可伸缩性问题)。然而,一个租户的load可能会影响其他tenets,即所谓的“Noisy Neighbor”效应。幸运的是Linux允许用户通过每个程序使用cgroups来控制资源消耗。Cgroup2替代了cgroup1,处理了版本1几乎所有的限制。Linux的...

2024-06-10 16:24:09 29

原创 PgSQL技术内幕 - psql与服务端连接与交互机制

PgSQL技术内幕 - 客户端psql与服务端连接与交互机制简单来说,PgSQL的psql客户端向服务端发起连接请求,服务端接收到请求后,fork出一个子进程,之后由该子进程和客户端进行交互,处理客户端的SQL等,并将结果返回给客户端。那么,他是如何做到客户端和服务端子进程进行交互呢?服务端怎么做到和多个客户端交互呢?1、客户端如何连接psql客户端连接及发送SQL命令过程如下图所示:1)通过pa...

2024-06-08 23:40:50 443

原创 国产数据库 - 架构设计 - 初识Doris

国产数据库 - 架构设计 - 初识DorisDoris是一款基于MPP架构的分析型数据库。整体架构很简单,只有两类进程FE和BE。其中FE(Frontend)主要负责用户请求的接入、查询解析规划、元数据管理和节点管理相关工作;BE(Backend)主要负责数据存储、查询计划的执行。1、架构业界比较有名另一款的MPP分布式数据库GreenPlum,对照其来说,这里的FE和GPDB的Master相对应...

2024-05-29 22:48:44 711

原创 PgSQL内核机制 - 算子执行统计元组个数

PgSQL内核机制 - 算子执行统计元组个数我们在执行explain analyze观察执行计划执行情况时,时常通过每个算子实际执行结果来分析SQL的执行,其中有一项“rows = XXX”表示执行的行数(这里姑且先认为是执行的真实行数)。但有些场景下,比如MergeJoin,如下:可以看到内表t1的SeqScan算子扫描出8行记录,而排序Sort算子仅4个,难道不是应该8个元组都进行排序吗?那我...

2024-05-25 22:58:31 403

原创 openGauss的BatchStore和Batchsortstate为什么仅ForwardScanDirection取数据

openGauss - 内核原理 - BatchStore和Batchsortstate为什么仅ForwardScanDirection取数据openGauss的普通执行引起从Tuplestorestate(物化)和Tuplesortstate(排序)取数据时,会有方向,即ForwardScanDirection:从前向后依次取;BackwardScanDirection:从后向前依次取。但是,在...

2024-05-19 22:13:31 895

原创 第三章 crash recovery机制

PgSQL崩溃恢复机制

2024-05-12 21:02:20 79

原创 第二章 checkpoint机制 - 原理

checkpoint内核原理

2024-05-11 21:34:07 65

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

PostgreSQL的buffer cache机制

2024-05-10 22:27:49 316

原创 第二章 checkpoint机制 - 介绍

PostgreSQL的checkpoint介绍

2024-05-10 21:57:53 73

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

原创 PostgreSQL备份恢复与复制

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

2024-05-08 22:02:20 71

原创 湖仓一体 - Apache Arrow的那些事

湖仓一体 - Apache Arrow的那些事Arrow是高性能列式内存格式标准。它的优势:高效计算:所有列存的通用优势,CPU缓存友好、SIMD向量化计算友好等;零序列化/反序列化:arrow的任何数据结构都是一段连续的内存,在跨进程/跨及其传输数据时直接发送/接收整段内存即可,不需要序列化和反序列化;完善的数据类型和生态;支持跨语言跨系统互操作。Arrow代码库分为3个层次:core层,提供数...

2024-05-05 12:46:58 769

原创 openGauss - 向量化执行引擎 - distinct分组聚合的实现

openGauss - 向量化执行引擎 - distinct分组聚合的实现openGauss向量化执行引擎中分组聚合有两种实现方式:排序和hash。本文介绍排序实现机制下的distinct分组聚合如何实现。分组聚合也分为两种使用方式:普通group by和grouping sets等分组集,其中普通group by就是每次查询生成一个分组的聚合;而grouping sets、cube或者rollu...

2024-04-27 19:09:24 837

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

转载 PgSQL技术内幕 - PostgreSQL查询处理阶段综述

PgSQL技术内幕 - PostgreSQL查询处理阶段综述查询发送到PgSQL后在后台进程会经历几个处理阶段,每个阶段都有不同职责,保证用户在尽可能短的时间内收到正确的响应。这个过程相当复杂,本文概述每个查询处理阶段的作用和意义。5个查询处理阶段解析器PgSQL使用lex(Flex lexical analyzer)和yacc(bison parser)工具创建解析器。通常通过写一个正则表达式定...

2024-04-05 22:35:44 43

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

原创 GPDB - 内核特性 - 分区表如何处理表名超长

GPDB - 内核特性 - 分区表如何处理表名超长GPDB分区表创建时有可能表名已存在,此时报错退出。但当分区表名超过64字符时,会进行截断,仅保留前63字符,此时就可能出现分区表名不同,截断后创建的分区表名相同从而创建失败的情况;还会出现分区表父表创建成功,但分区子表名创建失败,报表名已存在等错误导致创建失败。本文基于GreenPlum7.0分区表经典语法详细分析分区表名及分区子表名生成机制。1...

2024-03-23 21:48:41 380

原创 PgSQL技术内幕 - 优化器如何估算行数

PgSQL技术内幕 - 优化器如何估算行数PgSQL优化器根据统计信息估算执行计划路径的代价,从而选择出最优的执行计划。而这些统计信息来自pg_statistic,当然这个系统表是由ANALYZE或者VACUUM进行样本采集而来。关于该系统表的介绍详见:PgSQL技术内幕-Analyze做的那些事-pg_statistic系统表在理解优化器估算行数原理前,先了解几个概念。1、MCVMCV即Most...

2024-03-13 22:26:25 891 2

原创 PgSQL - 内核特性 - 把DuckDB弄进来怎么样

PgSQL - 内核特性 - 把DuckDB弄进来怎么样DuckDB是一款高性能的分析型数据库系统,支持了基于Push-based pipeline的向量化执行引擎。这么好的一款数据库,有办法直接弄到PgSQL里面,以利用其优秀的列式存储、向量化执行引擎等优秀特性吗?Hydra团队开源了一款插件pg_quack,将duckdb以表访问方法的方式加到PgSQL中,为PgSQL提供了新的存储引擎以及执...

2024-02-24 23:02:15 553

翻译 PgSQL - 16新特性 - 查询优化器改进

PgSQL - 16新特性 - 查询优化器改进PgSQL16对查询优化器进行了一些改进,使得很多查询比之前版本执行更快。PgSQL16分为10个大的改进。1、DISTINCT查询的增量排序PgSQL13中首次引入增量排序。增量排序减少了获取排序结果的代价。怎么做到?根据一个或者多个leading列已排好序的结果集只在剩余的列上执行排序。举个例子:列a上有一个btree索引,我们需要在a,b列上进行...

2024-02-17 09:37:54 457

原创 GPDB - 高可用 - FTS机制(一):探测成功

GPDB - 高可用 - FTS机制(一):探测成功作为GreenPlum高可用的核心功能,FTS(Fault Tolerance Server)进程负责故障检测。该进程是master上的一个子进程,可以快速检测到primary或者mirror是否宕机,并及时让primary/mirror进行故障切换。如果fts挂掉了,master还会再重新fork出一个。本文说说FTS的工作机制。1、gp_se...

2024-02-14 22:05:49 882

原创 PgSQL内核特性 - push-based pipeline 执行引擎

PgSQL内核特性 - push-based pipeline 执行引擎数据库的SQL执行引擎负责处理和执行SQL请求。通常情况下,查询优化器会输出物理执行计划,一般由一系列的算子组成。当前,有两种算子流水线构建方式:1)需求驱动的流水线,由算子不断从下级算子拉取数据;2)数据驱动的流水线,由算子将每个数据推送给父算子。论文《Push versus pull-based loop fusion i...

2024-02-10 20:07:46 979 1

原创 PgSQL技术内幕 - case when表达式实现机制

PgSQL技术内幕 - case when表达式实现机制CASE表达式如同 C语言中的if/else语句一样,为SQL添加了条件逻辑处理能力,可以根据不同条件返回不同结果。PgSQL支持两种语法:简单表达式和搜索表达式。1、搜索表达式语法如下:CASE WHEN condition THEN result [WHEN ...] [ELSE result]END表达式计算过程:...

2024-02-04 22:19:54 695 1

原创 PgSQL - 17新特性 - 块级别增量备份

PgSQL - 17新特性 - 块级别增量备份PgSQL可通过pg_basebackup进行全量备份。在构建复制关系时,创建备机时需要通过pg_basebackup全量拉取一个备份,形成一个mirror。但很多场景下,我们往往不需要进行全量备份/恢复,数据量特别大的时候,这个代价太大了。GPDB中有个工具gprecoverseg支持全量备份和增量备份。所谓全量备份,主要通过pg_basebacku...

2024-01-21 21:47:22 791

原创 GPDB - 高可用 - 流复制状态

GPDB - 高可用 - 流复制状态GPDB的高可用基于流复制,通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL1、WalSndStatetypedef enum WalSndState{ WALSNDSTATE_STARTUP = 0, WALSNDSTAT...

2024-01-06 22:57:54 1136

原创 PgSQL技术内幕 - ereport ERROR跳转机制

PgSQL技术内幕 - ereport ERROR跳转机制使用客户端执行SQL的时候经常遇到报ERROR错误,然后SQL语句就退出了。当然,事务也会回滚掉。本文我们看下它是如何做到退出SQL语句并回滚事务的。1、以insert一个numeric类型值为例表一个字段为numeric(10,2)类型,表示存储10位数字,精确到小数点后两位。当插入的值超过10位时就会报错:numeric field o...

2023-12-24 14:19:11 169

原创 GPDB - FTS机制 - FTS进程启动

GPDB - FTS机制 - FTS进程启动作为GreenPlum高可用的核心功能,FTS(Fault Tolerance Server)进程负责故障检测。该进程是master上的一个子进程,可以快速检测到primary或者mirror是否宕机,并及时让primary/mirror进行故障切换。如果fts挂掉了,master还会再重新fork出一个。本文说说FTS进程是怎么启动的。1、FTS进程的...

2023-12-17 19:02:05 62

原创 GPDB - 高可用特性 - 同步复制与异步复制

GPDB - 高可用特性 - 同步复制与异步复制GreenPlum是基于PostgreSQL的分布式数据库,master用于接收用户请求并生成执行计划与分发,当然也可以参与计算;而segment则用于存储数据,将计算的结果传递给master。Segment本身具有高可用特性,即分为primary和mirror,通过主从复制构建高可用关系。默认使用同步复制,若FTS检测到mirror发生异常,则修改...

2023-12-10 22:16:23 105

转载 PgSQL 16 - 新特性 - reserved_connections

PgSQL 16 -新特性 - reserved_connectionsPgSQL16中新加了一个新特性:新增reserved_connections。DBA和软件开发工程师经常使用超级用户(比如postgres)进行维护等操作。然而,在安全性方面,这并不是一个理想的操作。多年来,已经添加了一些功能来减少使用这种高度特权的系统连接方式的需要,而预留连接是另一种方法。1、调整PgSQL中的连接参数...

2023-12-04 15:31:39 112

原创 PgSQL技术内幕 • statement_timeout做的那些事

PgSQL技术内幕 •statement_timeout做的那些事statement_timeout是Postgres种的一个配置参数,用于指定SQL语句执行的超时时间,当超时时就取消该SQL的执行,并返回错误信息。这个参数通常用于控制运行时间较长的查询,避免影响数据库性能和响应时间。一旦一条SQL查询花费几分钟甚至更长时间才能执行完时,若没有限制,这种查询可能占用数据库资源,导致其他请求阻塞。...

2023-12-01 22:10:45 407

原创 PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables

PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tablespg_stat_all_tables视图中记录有analyze信息,比如何时做的analyze、表元组个数(活元组、死元组)等。重启后发现该视图中表的统计信息重置不见了,发生了什么?1、pg_stat_all_tables先理解下该视图,该视图定义如下。从视图定义可以看到相关统计信息都是通过一系列函数获取的:yzs=...

2023-11-25 22:26:37 370

转载 PgSQL-NULL值处理-两个令人兴奋的功能

PG的两个功能,可使NULL值的处理更加合理。1、唯一列中的NULL值一个众所周知,但令人讨厌的特性:NULL值的处理:NULL!=NULL,因此一个UNIQUE列仍可以有多个NULL值。CREATE TABLE test ( id serial PRIMARY KEY, value TEXT UNIQUE);INSERT INTO test (value) VALUES ...

2023-11-22 21:51:34 257

原创 PgSQL技术内幕-Bitmap Index Scan

PgSQL技术内幕-Bitmap Index Scan1、简介Bitmap索引扫描是对索引扫描的一个优化,通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点:1)管理每个Bitmap的hash slot没用完时,每个Bitmap代表每个heap页中满足条件元组的ItemIDs,通过Bitmap扫描heap页时需要将所有Bitmap按照页号进行排序,然后依次获取heap页中记录,...

2023-11-19 23:16:15 469

原创 PgSQL技术内幕-Analyze做的那些事-pg_statistic系统表

PgSQL的优化器为一个查询生成一个执行效率相对较高的物理执行计划树。执行效率的高低依赖于代价估算。比如估算查询返回的记录条数、记录宽度等,就可以计算出IO开销;也可以根据要执行的物理操作估算出CPU代价。那么估算依赖的信息来源哪呢?系统表pg_statistic(列级别统计信息)为代价估算提供了关键统计信息。Analyze操作或者vacuum进行了统计信息采集,并将对数据按列进行分析,得到每列的...

2023-11-11 23:54:09 228

转载 向量化引擎怎么提升数据库性能

数据库向量化是一项工程性很大的挑战,但可为StarRocks等实时分析引擎提供数量级性能提升。1、向量化引擎为什么可以提升性能本文讨论的数据库都是基于CPU架构,数据库向量化一般指基于CPU的向量化,因此数据库性能优化的本之在于:基于CPU的程序如何进行性能优化。这引出2个关键问题:1)如何衡量CPU性能2)哪些因素影响CPU性能第一个问题可以用以下公式总结:CPU Time = (instruc...

2023-11-06 07:01:52 108

空空如也

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

TA关注的人

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