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

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

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

2019-05-18 20:25:00 783

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

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

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

2024-04-05 22:35:44 6

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

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

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

2024-03-23 21:48:41 362

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

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

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

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

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

2024-02-24 23:02:15 390

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

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

2024-02-17 09:37:54 180

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

原创 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 940 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 600 1

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

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

2024-01-21 21:47:22 595

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

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

2024-01-06 22:57:54 1124

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

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

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

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

2023-12-10 22:16:23 89

转载 PgSQL 16 - 新特性 - reserved_connections

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

2023-12-04 15:31:39 85

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

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

2023-12-01 22:10:45 251

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

转载 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 170

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

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

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

2023-11-11 23:54:09 160

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

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

2023-11-06 07:01:52 79

原创 openGauss-向量化执行引擎-索引扫描CStoreIndexScan

openGauss-向量化执行引擎-索引扫描CStoreIndexScanopenGauss实现了向量化执行引擎,达到算子级别的并行。也就是说在执行器火山模型基础上,一次处理一批数据,而不是一次一个元组。这样可以充分利用SIMD指令进行优化,达到指令级别并行。本文关注索引扫描算子CStoreIndexScan,并以btree索引为例。1、Btree索引openGauss基于PostgreSQL,b...

2023-11-05 09:26:13 80

原创 openGauss-向量化执行引擎-VecUnique算子

openGauss-向量化执行引擎系列-VecUnique算子openGauss实现了向量化执行引擎,达到算子级别的并行。也就是说在执行器火山模型基础上,一次处理一批数据,而不是一次一个元组。这样可以充分利用SIMD指令进行优化,达到指令级别并行。前期我们介绍了PgSQL Unique算子的实现机制,本文接着介绍openGauss是如何实现Unique算子向量化的。简单来说,openGauss的V...

2023-11-01 22:05:40 181

原创 PgSQL-执行器机制-Unique算子

PgSQL-执行器机制-Unique算子PgSQL中输出去重的元组有多种方法,比如通过HashAgg或者GroupAgg。这里我们介绍第三种方法,通过Unique算子来完成这个功能。当然语句上可以是:select distinct(id1) from t;1、ExecUnique执行器执行算子的函数都是ExecXXX,其中XXX代表某个算子。Unique算子的执行是由函数ExecUnqiue完成,...

2023-10-27 22:43:40 398

原创 GPDB7-新特性-角色创建

GPDB7-新特性-角色创建9月GPDB7发布了release版本,新增了很多新特性及性能改进,对GPDB用户带来福音。业务在调研GPDB6升级到GPDB7的过程中,生产环境会创建用户,利用这些用户进行迁移。但是出现问题了,竟然会报:Role names starting with “pg_”are reserved。也就是说GPDB7以”pg_”开头的用户是预留用户,不给用户创建使用。1、现象...

2023-10-25 21:07:20 67

原创 [翻译]理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要

理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要磁盘IOPS(每秒输入/输出操作数)是衡量磁盘系统性能的关键指标。代表每秒可以执行的读写操作数量。对于严重依赖于磁盘访问的PG来说,了解和优化磁盘IOPS对实现最佳性能至关重要。本文讨论IOPS相关主题:IOPS是什么、如何影响PG、如何衡量它以及需要如何调优。1、PG的IOPS是什么从高层次看,一个IO操作要么是读数据(“...

2023-10-21 23:11:16 157

原创 GPDB7-新特性-Fast ANALYZE on Append-Optimized tables

GPDB7-新特性-Fast ANALYZE on Append-Optimized tables9月28日,发布了GPDB7版本,对AO/CO表的ANALYZE进行了优化,有了很大性能提升。由于PG的两阶段采样方法并不能在AO/CO表上优雅工作,GP不得不解压缩所有的边长块(AO/CO表的block是变长的)直到达到目标记录。如果采样记录在表末尾,就很容易造成全表扫描。所以,之前版本是不支持在A...

2023-10-15 12:34:21 68

原创 论文研读 - share work - QPipe:一种并行流水线的查询执行引擎

QPipe:一种并行流水线的查询执行引擎QPipe: A Simultaneously Pipelined Relational Query Engine关系型数据库通常独立执行并发的查询,每个查询都需执行一系列相关算子。为了充分利用并发查询中的数据扫描与计算,现有研究提出了丰富的技术:从缓存磁盘页以构建物化视图到优化多查询。然而,现有研究所提出的思想本质上受现代以查询为中心的引擎设计哲学所限制。...

2023-10-01 22:55:20 132

转载 GPDB7终于Release了!

终于等到了GPDB7的发布,升级到了PgSQL12的内核,性能、功能有了大大的提升,看下新特性图:详情参考:https://tanzu.vmware.com/content/blog/vmware-greenplum-7-release代码:https://github.com/greenplum-db/gpdb/tree/7.0.0...

2023-09-30 00:00:52 86

原创 PgSQL-内核特性-TupleTableSlotOps

PgSQL-内核特性-TupleTableSlotOps执行器中表达式结果、函数结果、投影结果等,各种结果都需要以元组的形式返回,所以PgSQL引入了一种通用格式保存数据:TupleTableSlot。PgSQL执行器将记录存储到“元组表”中在各个算子之间进行传递,元组表是独立TupleTableSlot的链表。而TupleTableSlot又分为多种,以减少解析和构建开销。1、介绍存储模块提供了...

2023-09-29 21:59:30 317

原创 论文研读-数据共享-大数据流分析中的共享执行技术

Shared Execution Techniques for Business Data Analytics over Big Data Streams大数据流分析中的共享执行技术1、摘要2020年的一篇共享工作的论文:商业数据分析需要处理大量数据流,并创建物化视图以便给用户实时提供分析结果。物化每个查询,并作为单独的查询执行计划进行持续刷新并不高效并且不可扩展。本文针对并行执行的多个查询,提出...

2023-09-23 21:56:37 65

原创 PgSQL-向量数据库插件-lantern

PgSQL-向量数据库插件-lantern即pgvector、pg_embedding 后又一向量数据库扩展Lantern问世了。当然也为向量列提供了hnsw索引以加速ORDER BY... LIMIT查询。Lantern使用usearch实现hnsw。使用方法保留了标准PgSQL接口,兼容其生态工具。首先需要安装该插件:CREATE EXTENSION lantern;创建一个包含向量列的表,并...

2023-09-21 22:45:14 309

原创 PgSQL-安全加固实践-如何设置非全零监听

PgSQL-安全加固实践-如何设置非全零监听1、介绍PgSQL在启动前需要配置listen_addresses配置项,该配置项表示允许PgSQL服务监听程序绑定的IP。我们知道一个host上可以有多个网卡,每个网卡可以绑定多个IP,该参数就是控制PgSQL服务绑定在哪个或者哪几个IP上。即控制服务使用哪个网络接口进行监听连接请求。对于网络接口而言,这样可以有效阻止大量恶意重复的连接。2、问题在高可...

2023-09-15 21:44:44 278

转载 向量数据库-PgSQL插件-pgvector 0.5.0特性

Pgvector是一个使得PgSQL具有向量数据库能力的开源插件,之前pgvector出来后,仅支持IVFFlat索引。随之马上又出现了pg_embedding插件支持HNSW索引,比pgvector性能高20倍。Pgvector的迭代速度够快,马上也加入了对HNSW的支持。Pgvector0.5版本支持的新特性:支持HNSW索引;更快的距离计算;并行构建ivfflat索引。1、新的索引类型:Hi...

2023-09-09 22:16:26 875

原创 GPDB-内核原理-如何指定发送数据目的地

GPDB-内核原理-如何指定发送数据目的地GPDB是一个分布式数据库,数据存放在各个segment上。Master用于接收用户请求,并将执行计划发送到各个segment上去执行。各个segment将数据发送个master汇总并返回用户。当进行join,join条件不是分布键时,各个segment就需要将数据重分布或者广播给其他segment。这个数据发送时,默认利用UDP协议进行传输,那么各个se...

2023-09-06 22:32:48 105

原创 PgSQL-并行查询系列-介绍[译]

PgSQL-并行查询系列-介绍现代CPU模型拥有大量的CPU核心。多年来,数据库应用程序都是并发向数据库发送查询的。查询处理多个表的行时,若可以使用多核,则可以客观地提升性能。PgSQL 9.6引入了并行查询的新特性,开启并行查询后可以大幅提升性能。1、局限性1)若所有CPU核心已经饱和,则不要启动并行查询。并行执行会从其他查询中窃取CPU时间,并增加响应时间2)进一步需要注意:并行处理会显著增加...

2023-09-03 22:13:18 1457 2

原创 论文研读-SIMD系列-利用BMI指令进行选择下推

利用位操作指令BMI在列存中进行选择下推Selection Pushdown in Column Stores using Bit Manipulation Instructions列存能够提供高效的压缩能力,所以当前分析型数据库系统都基于列存储。然而,查询处理时,压缩会面临解码速率的挑战。以往研究探索了编码列上进行谓词下推,以避免解码,但这些技术仅限于特定的编码schemes和谓词,限制了实际应...

2023-09-02 21:33:42 170

原创 列式存储引擎-内核机制-Parquet格式

列式存储引擎-内核机制-Parquet格式Parquet是一种开源的列式存储结构,广泛应用于大数据领域。1、数据模型和schemaParquet继承了Protocol Buffer的数据模型。每个记录由一个或多个字段组成。每个字段可以是atomic字段或者group字段。Group字段包含嵌套的字段,每层可以要么是atomic要么是group字段。每个字段定义由两部分组成:数据类型(基本的数据类型...

2023-08-27 21:49:17 125

空空如也

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

TA关注的人

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