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

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

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

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

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

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

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

2023-11-11 23:54:09 271

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

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

2023-11-06 07:01:52 137

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

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

2023-11-05 09:26:13 110

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

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

2023-11-01 22:05:40 252

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

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

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

2023-10-25 21:07:20 81

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

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

2023-10-21 23:11:16 186

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

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

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

2023-10-01 22:55:20 159

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

原创 PgSQL-内核特性-TupleTableSlotOps

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

2023-09-29 21:59:30 348

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

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

2023-09-23 21:56:37 89

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

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

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

2023-09-15 21:44:44 307

转载 向量数据库-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 1308

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

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

2023-09-06 22:32:48 128

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

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

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

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

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

2023-09-02 21:33:42 207

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

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

2023-08-27 21:49:17 175

原创 GPDB-疑难杂症-PlaceHolderVar

GPDB-疑难杂症-PlaceHolderVar从GPDB5升级到GPDB6时,遇到以往可以执行的SQL不能执行了。报错:PlaceHolderVar found where not expected!语法不兼容了?postgres=#CREATETABLEt1(id1int)WITH(appendonly=true,compresstype=none,blocksize...

2023-08-18 22:17:26 179

原创 国产数据库-内核特性-低基数全局字典

国产数据库-内核特性-StarRocks低基数全局字典StarRocks2.0引入了低基数全局字典,可以通过全局字典将字符串的相关操作转换成整型相关操作,大大提升查询性能。1、低基数字典对于利用整型替代字符串进行处理,通常使用字典编码进行优化。StarRocks也是利用这样的技术。以过滤为例:一个city列,里面有:BJ,SH,GZ,SZ四个字符串,需要从里面过滤city=’BJ’的值,普通操作就...

2023-08-13 22:30:07 212

原创 专利研读-SIMD系列-向量化引擎

专利研读-SIMD系列-向量化引擎1、专利内容阿里巴巴的专利:向量化处理数据的方法及装置,主要思想为:对于行存表或行、列存混合存储的查询场景,需要手工将行存表转换成列存表再在列存表基础上进行向量化处理,这种方式代价较高。阿里提供了一种方法从查询计划树中识别出数据不支持向量化操作的子树节点,将数据转换成支持向量化操作的数据。理解其实就是在不支持向量化的算子上再挂一个转换算子,将行存数据转换成向量化执...

2023-08-11 20:39:50 158

原创 论文研读-SIMD系列-基于分区的SIMD处理及在列存数据库系统中的应用

基于分区的SIMD处理及在列存数据库系统中的应用单指令多数据(SIMD)范式称为列存数据库系统中优化查询处理的核心原则。到目前为止,只有LOAD/STORE指令被认为足够高效,可以实现预期的加速,并且认为需要尽可能避免GATHER/SCATTER操作。但是GATHER指令提供了一种非常灵活的方式用来将非连续内存位置的数据填充到SIMD寄存器中。正如本文讨论的那样,如果使用方法合适,GATHER会达...

2023-08-09 20:44:42 187

原创 国产数据库-云原生MPP数据库-Cloudberrydb

GreenPlum(GPDB)是一款基于PostgreSQL(PgSQL)的开源分布式数据库。目前GPDB7已发布beta4,PgSQL内核支持到了12.12,但PgSQL优秀内核特性比如并行查询仍旧不支持。经查询PgSQL中并行代码已存在于GPDB中,但执行计划生成这块却不支持。这就比较可惜了。现在有款国产分布式数据库CloudberryDB基于GPDB,继承了GPDB优秀特性,并兼容PgSQL...

2023-08-03 09:45:30 411

原创 国产数据库-HTAP-MatrixOne的OLAP技术特性

国产数据库-HTAP-MatrixOne的OLAP技术特性MatrixOne是矩阵起源数据库创业公司打造的开源超融合异构数据库,能同时灵活支持OLTP、OLAP等不同工作负载。下面学习下其关于OLAP方面的技术特性。1、优化器为减少IO采用的技术特性:1)列裁剪;2)谓词下推;3)谓词推荐;3)Runtime filter列裁剪:当然基于列存,扫描时,仅扫描需要的列。不扫描不相干列谓词下推:将一些...

2023-07-30 19:47:21 104

原创 SIMD系列-GATHER/SCATTER操作

SIMD系列-GATHER/SCATTER操作众所周知,SIMD寄存器可以使用LOAD/STORE操作与标量域(或者更准确的说是内存)进行通信。这些操作的缺点是:只允许移动内存中连续的数据元素。然而,我们代码中,经常需要访问非连续的内存。本教程中将解释GATHER/SCATTER操作以及他们如何类推到LOAD/STORE操作。某些情况下,您可能希望使用来自非连续内存位置的数据填充寄存器。几个使用例...

2023-07-29 21:45:33 699

原创 国产数据库-内核特性-gbase8a智能索引

国产数据库-内核特性-gbase8a智能索引南大通用gbase8a MPP Cluster是一款分析型MPP数据库,有个特性鲜明的功能就是智能索引。该索引建立膨胀率不超过百分之一,包含基于列的统计信息,可以有效过滤数据,大幅降低数据库磁盘IO,尤其是在聚合操作上也能达到很高的性能。1、infobrightInfobright是一款开源列式存储数据库,采用知识网格查询优化方式,对即席查询有很大提升。...

2023-07-26 22:10:30 193

原创 OpenGauss与NVM

OpenGauss与NVMNVM(非易失性内存),也叫PM(持久内存)具有可字节寻址、大容量、非易失型和堪比DRAM的速度等特性。随着英特尔傲腾产品的出世,现有数据库适配这种新型硬件显得更加有必要。OpenGauss在这方面也做了探索,实现了DRAM-PM-DISK三层存储架构。当然,实现方式参考了2018年SIGMOD会议的一篇论文《Managing Non-Volatile Memory in...

2023-07-24 08:00:35 83

原创 PgSQL-使用技巧-如何衡量网络对性能的影响

PgSQL-使用技巧-如何衡量网络对性能的影响PG数据库和应用之间常见的部件有连接池、负载平衡组件、路由、防火墙等。我们常常不在意或者认为涉及的网络hops对整体性能产生的额外开销是理所当然的。但在很多情况下,它可能会导致严重的性能损失和拖累整体吞吐量。相当长一段时间,我试图对这种开销进行良好的评估,之前写过how the volume of data transmission as part o...

2023-07-23 21:40:17 191

原创 GPDB-内核特性-GP7动态分区裁剪

GPDB-内核特性-动态分区裁剪上文我们介绍了,GP7中ORCA不再支持动态分区裁剪。那么他的动态分区裁剪效果又是怎么实现的呢?GP7除ORCA优化器外还有PG优化器,他的动态分区裁剪执行计划由PG优化器生成。1、PartitionSelectorState结构动态分区裁剪的算子为PartitionSelector,我们看下相关数据结构:执行器执行过程中,使用PartitionSelectorSt...

2023-07-16 22:36:52 167

原创 GPDB-内核特性-GP7不再支持动态分区裁剪

GPDB-内核特性-GP7不再支持动态分区裁剪GreenPlum支持分区表的功能,并通过分区裁剪来减少读取的数据量。分区裁剪分为静态分区裁剪和动态分区裁剪。静态分区裁剪:执行计划在生成时,就通过条件值过滤出需要的子分区,执行时仅扫描裁剪后的分区即可;动态分区裁剪:发生在SQL执行阶段,需要根据维度表的数据动态分析出需要哪些分区。GP6中ORCA支持动态分区功能:set optimizer=on;...

2023-07-14 21:38:04 146

原创 GPDB-内核特性-gp_interconnect_fc_method参数

GPDB-内核特性-gp_interconnect_fc_method参数gp_interconnect_fc_method参数控制使用哪种流量控制方式:capacity根据接收方窗口来控制发送;loss(默认)根据丢包情况控制发送速度。Loss是基于capacity,还会根据丢包情况调整发送速度。那么针对这个参数怎么解根据接收方窗口来控制发送呢?1、接收端主线程接收端主线程通过processIn...

2023-07-12 22:46:32 233

原创 PostgreSQL内存上下文[翻译]

PostgreSQL内存上下文PG使用共享内存在多进程之间进行数据共享。使用动态共享内存段dynamic shared memory segments在并行workers之间进行数据交换,这个内存在启动时分配固定大小。但是PG后端进程必须管理私有内存用于处理SQL语句。本文,介绍PG如何使用memory context,即内存上下文,来管理私有内存;以及如何检查内存使用情况。这对于编写服务器代码的...

2023-07-02 21:22:47 621

原创 GPDB-内核特性-UDPIFC超时重传

GPDB-内核特性-UDPIFC超时重传GreenPlum默认使用UDP协议进行数据传输。发生网络拥塞时,实现了超时重传以解决拥塞。1、unack_queue_ring队列超时重传的基础数据结构是unack_queue_ring队列。如图所示:1)currentTime用来标记checkExpiration位于哪个时间周期。发送数据包时回更新该值:sendBuffers第一次发送时,unack_q...

2023-06-28 22:36:48 192

原创 GPDB-内核特性-UDP流量控制

GPDB-内核特性-UDP流量控制GPDB是在开源PostgreSQL基础上,采用MPP架构的关系型分布式数据库,具有强大的大规模数据分析任务处理能力。采用Shared-Nothing架构,整个集群由多个数据节点(segment)和控制节点(master)组成。数据节点之间会出现数据洗牌,并且数据节点会将数据发送到控制节点进行汇总输出。数据节点之间的数据洗牌和数据节点向控制节点发送数据通过Inte...

2023-06-23 21:51:13 417

原创 PostgreSQL中WaitEventSet的超时如何实现

PostgreSQL中WaitEventSet的超时如何实现WaitEventSet的等待超时如何实现?我们了解到,它和epoll有关,首先先了解下epoll_wait这个函数:int epoll_wait( int epfd,//epoll_create函数返回的epoll实例的句柄 struct epoll_event * events, //出参。Epoll将发生的事件集合从内核复制...

2023-06-12 08:00:17 107

原创 GPDB中Latch等待与唤醒实现机制

GPDB中Latch等待与唤醒实现机制GreenPlum/PostgreSQL中有很多Latch以帮助多进程以及主线程与从线程之间协作。那么Latch是如何实现的呢?Latch可以在多进程之间以及主线程和从线程之间实现等待与唤醒,WaitEventSet是实现这项功能的关键结构。本文我们聊聊WaitEventSet的实现以及一个用法。1、WaitEventSet的结构1)WaitEventSet用...

2023-06-11 18:35:42 915

空空如也

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

TA关注的人

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