- 博客(41)
- 资源 (21)
- 收藏
- 关注
原创 CloudberryDB(七)二级索引
因此,在创建索引时,需要权衡索引带来的性能提升与其维护成本。- **二级索引**:二级索引(非聚集索引)将数据与索引分开存储,索引的叶子节点包含指向实际数据行的指针。- **二级索引**:二级索引适合于点查询和快速查找特定列的值,但在范围查询时可能不如主索引高效,因为需要通过索引找到主键,再通过主键找到实际数据(回表查询)。- **主索引**:主索引(聚集索引)将数据存储与索引放在一起,索引的叶子节点直接包含行数据。- **二级索引**:二级索引是在表的非主键列上创建的,用于加速对特定列的查询。
2025-02-15 18:13:30
273
原创 CloudberryDB(六)SPI拓展功能
2. **接口函数**:SPI提供了一组接口函数,如`SPI_connect`、`SPI_execute`、`SPI_finish`等,这些函数用于建立与SPI管理器的连接、执行SQL命令以及释放连接。- 正确管理SPI使用过程中的资源。5. **扩展性**:SPI的实现使得开发者可以创建自定义的数据库扩展(Extension),通过这些扩展可以在数据库中执行复杂的逻辑和操作。3. **事务管理**:SPI模块具备事务管理能力,这意味着在执行的SQL语句中,如果发生错误,事务会自动回滚,确保数据的一致性。
2025-02-15 18:03:10
438
原创 CloudberryDB(四)并行执行
这条SQL语句将查询`pg_settings`系统表,返回与`max_parallel_workers_per_gather`相关的配置信息。Greenplum数据库的并行度配置也存储在`postgresql.conf`文件中。这条命令将显示当前集群中所有节点的`max_parallel_workers_per_gather`配置值。在Greenplum数据库中,可以使用`SHOW`命令来查看当前的并行度配置。如果你有足够的权限,可以使用`gpconfig`命令来查看当前的并行度配置。
2025-01-18 07:51:18
628
原创 CloudberryDB(五)内存管理
Greenplum通过`vm.overcommit_memory`和`vm.overcommit_ratio`内核参数来管理内存分配,建议将`vm.overcommit_memory`设置为2,以确保安全的内存分配。1.**使用jemalloc内存分配器**:Greenplum默认使用jemalloc作为内存分配器,它通过减少内存碎片和优化内存分配策略,显著提升了程序的性能,特别适用于多线程和高并发环境。例如,查询执行过程中会根据需要分配和释放内存,以提高内存使用效率。
2025-01-11 10:05:19
338
原创 CloudberryDB(三)布隆过滤器的 RuntimeFilter
一种是:新增了RuntimeFilter算子,在Hash Join算子的探测端添加RuntimeFilter算子,当然这就导致仅在RuntimeFilter算子 bloom bitmap 实现提前过滤,并未将filter下沉到SeqScan算子或者TableAM层,仍旧存在不必要的算子计算。由此,可见这种方式实现原理上比较完善,可以尽可能的减少中间算子的计算。4)可以看到,这种运行时过滤方式,仅将过滤下沉了一个执行节点,底层节点的扫描等多层执行计划节点并没有最优地避免执行,效果也不会太好。
2024-12-14 20:53:41
837
原创 CloudberryDB(二) 演化路线图
CloudberryDB 制定了演化路线图并在逐步改进,这是 Cloudberry Database 发挥独特价值之处。计划、正在进行或已完成的一些工作。
2024-12-14 20:36:27
840
原创 CloudberryDB(一)安装分布式数据库集群
将COORDINATOR_DIRECTORY修改为Coordinator节点数据目录:/data/coordinator。将MIRROR_DATA_DIRECTORY修改为Mirror的数据目录:/data/mirror。将DATA_DIRECTORY修改为Segment计算节点的数据目录:/data/primary。端口、Coordinator节点、Segment节点、Mirror节点的信息配置成之前配置的。编译CloudberryDB,设置安装路径为/usr/local/cloudberrydb。
2024-12-14 20:04:16
1234
原创 postgresql -- 等待事件
等待事件是做性能优化、故障诊断的利器。Oracle数据库在7.3开始通过OWI提供了等待事件接口,自此开始,等待事件已经成为DBA分析数据库的最为重要的手段之一。PG及其相近与相兼容的数据库的等待事件 .
2024-09-06 22:02:51
356
1
原创 Greenplum 日常维护命令
评:这个说的不全面,vacuum分两种,一种是analize,优化查询计划的,还有一种是清理垃圾数据,postres删除工作,并不是真正删除数据,而是在被删除的数据上,坐一个标记,只有执行vacuum时,才会真正的物理删除,这个非常重用,有些经常更新的表,各种查询、更新效率会越来越慢,这个多是因为没有做vacuum的原因。评:少写了个analyze,如果只是explain,统计出来的执行时间,是非常坑爹的,如果希望获得准确的执行时间,必须加上analyze。-m:只列出mirror 实例的状态和配置信息。
2024-05-18 11:14:52
630
原创 Postgres-XL 10 使用介绍(三)
##### systemd RemoveIPC##### Resource Limits##### Linux Memory Overcommit##### Linux Huge Pages像PostgreSQL一样,使用大的连续页面可以减少使用大块连续内存时的开销,尤其是当使用大值的shared_buffers时。 要在PostgreSQL中使用此功能,您需要具有`CONFIG_HUGETLBFS = y`和`CONFIG_HUGETLB_PAGE = y`的内核。 您还必须调整内核设置`vm.nr_hu
2022-06-19 10:51:01
401
原创 Postgres-XL 10 使用介绍(二)
#### 5.3 Constraints数据类型是一种限制可以存储在表中的数据类型的方法。 但是,对于许多应用程序,它们提供的约束过于粗糙。 例如,包含产品价格的列可能只应接受正值。 但是没有标准的数据类型只接受正数。 另一个问题是,您可能希望相对于其他列或行约束列数据。 例如,在包含产品信息的表中,每个产品编号应只有一行为此,SQL允许您定义列和表的约束。 约束使您可以根据需要尽可能多地控制表中的数据。 如果用户尝试将数据存储在违反约束的列中,则会引发错误。 即使该值来自默认值定义,也是如此。#####
2022-06-19 10:48:41
592
原创 Postgres-XL 10 使用介绍(一)
Postgres-XL 是一个基于PostgreSQL的一个开源项目,在此基础上提供可扩展的写入操作和大批量的并行处理.并且它是一个数据库组件集合体,可以将其安装在多个操作系统或虚拟机上.
2022-06-19 10:42:57
1109
原创 Postgres-XL 简析
这个项目的背后是一家叫做stormDB的公司。项目代码基于postgres-xc,开源版本应该是stormdb的一个分支。In 2010, NTT's Open Source Software Center approached EnterpriseDB tobuild off of NTT OSSC's experience with a project called RitaDB andEnterpriseDB's experience with a project called Grid..
2022-05-30 22:02:54
2493
原创 postgresql源码(十六)——Executor(查询执行模块之——control节点(下))
5.ModifyTable节点先看一个ModifyTable节点的例子:postgres=# explain update test_01 set id = 5 where name = 'xxx'; QUERY PLAN--------------------------------------------------------------- Update on test_01 (cost=0.00..23.75 rows=6 widt
2022-04-13 20:02:40
318
原创 postgresql源码(十五)——Executor(查询执行模块之——control节点(上))
控制节点控制节点用于完成一些特殊的流程执行方式。由于PostgreSQL为査询语句生成二叉树状的査询计划,其中大部分节点的执行过程需要两个以内的输入和一个输出。但有一些特殊的功能为了优化的需要,会含有特殊的执行方式和输人需求(例如对于update、INSERT和DELETE,在普通的SELECT基础上有一个ModifyTable节点,UNION操作在一个计划节点就执行多个表(大于2)的合并,Append节点并未把UNION涉及的多个表放在孩子节点中,而是将这些表组成一个链表放在Append节点的appe
2022-04-13 19:59:21
300
原创 postgresql源码(十四)——Executor(查询执行模块之——Join节点(下))
3.HashJoin 节点postgres=# explain select a.*,b.* from test_dm a join test_dm2 b on a.xxx = b.xxx; QUERY PLAN-------------------------------------------------------------------------------- Hash Join (cost=34846.00..30
2022-04-13 19:55:43
524
原创 postgresql源码(十一)——Executor(查询执行模块之——Materialization节点(上))
物化节点顾名思义,物化节点是一类可缓存元组的节点。在执行过程中,很多扩展的物理操作符需要首先获取所有的元组后才能进行操作(例如聚集函数操作、没有索引辅助的排序等),这时要用物化节点将元组缓存起来。下面列出了PostgreSQL中提供的物化节点。 T_MaterialState, T_SortState, T_GroupState, T_AggState, T_WindowAggState, T_UniqueState, T_HashState, T_SetOpState, T_Lo
2022-04-13 19:42:56
590
原创 postgresql源码(十二)——Executor(Materialization节点(下))
7.SetOp节点SetOp节点用于处理集合操作,对应于SQL语句中的EXCEPT、INTERSECT两种集合操作,至于另一种集合操作UNION,可直接由Append节点来实现。一个SetOp节点只能处理一个集合操作(由两个集合参与),如果有多个集合操作则需要组合多个SetOp节点来实现。SetOp节点仅有一个左子节点作为输人,其左子节点是一个Append节点或者是一个Sort节点(Sort节点的子节点是一个Append节点),其低层的Append节点中只放置两个子计划用于表示参与集合操作的左集合和
2022-04-13 19:40:47
404
原创 postgresql源码(十三)——Executor(Join节点(上))
Join节点JOIN节点有以下三种:T_NestLoopState, T_MergeJoinState, T_HashJoinState,连接类型节点对应于关系代数中的连接操作,PostgreSQL中定义了如下几种连接类型(以T1 JOIN T2 为例): 1)Inner Join:内连接,将T1的所有元组与T2中所有满足连接条件的元组进行连接操作。 2)Left Outer Join:左连接,在内连接的基础上,对于那些找不到可连接T2元组的T1元组,用一个空值元组与之
2022-03-30 17:40:48
421
原创 postgresql源码(十)——Executor(Scan节点(下))
剩下的七个Scan节点 T_SubqueryScanState, T_FunctionScanState, T_ValuesScanState, T_CteScanState, T_WorkTableScanState, T_ForeignScanState, T_CustomScanState,8.SubqueryScan 节点SubqueryScan节点的作用是以另一个査询计划树(子计划)为扫描对象进行元组的扫描,其扫描过程最终被转换为
2022-03-30 17:32:20
345
原创 postgresql源码(九)——Executor(Scan节点(上))
从前面介绍的可优化语句处理相关的背景知识、实现思想和执行流程,不难发现可优化语句执行的核心内容是对于各种计划节点的处理,由于使用了节点表示、递归调用、统一接口等设计,计划节点的功能相对独立、代码总体流程相似,下面介绍执行器中各种计划节点的相关执行过程。在PostgreSQL中,计划节点分为四类,分别是控制节点(Control Node)、扫描节点(ScanNode),物化节点(Materialization Node)、连接节点(Join Node) 。 控制节点:是一类用于处理特殊情况的节点,用
2022-03-30 17:15:18
625
原创 postgresql源码(八)——Executor(可优化语句的执行)
2.可优化语句的执行可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理。该模块对外提供了三个接口: ExecutorStart、ExecutorRun 和 ExecutorEnd,其输入是包含査询计划树的数据结构QueryDesc,输出则是相关执行信息或结果数据。如果希望执行某个计划树,仅需构造包含此计划树的QueryDesc,并依次调用ExecutorStart、ExecutorRun、ExecutorEnd 3个过程即能完成相应的处理过程。从我
2022-03-30 17:02:49
559
原创 postgresql源码(七)——Executor(数据定义语句的执行)
1.数据定义语句的执行数据定义语句(也就是之前我提到的非可优化语句)是一类用于定义数据模式、函数等的功能性语句。不同于元组增删査改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数。数据定义语句的执行流程最终会进入到ProcessUtility处理器,然后执行语句对应的不同处理过程。由于数据定义语句的种类很多,因此整个处理过程中的数据结构和方式种类繁冗、复杂,但流程相对简单、固定。这里我们以Create table为例说明数据定义语句的具体处理过程。1.1数据定义语句执行流程由于P
2022-03-30 16:57:51
315
原创 postgresql源码(六)——Executor(查询执行策略)
从以下五个部分介绍查询执行模块(很可能要分成四到五篇文章来阐述,毕竟是比查询规划还要复杂的模块):1.查询优化策略2.非可优化语句的执行3.可优化语句的执行4.计划节点5.其它子功能介绍查询执行器的框架结构如下图所示。在exec_simple_query函数中,调用查询编译模块之后,就进入了查询执行器模块。在该模块中,就是按照前一阶段查询规划模块锁生成的查询计划,有机第调用存储、索引,并发等模块来完成数据的读取或者修改的过程。在本模块中,总共下属四个子模块,分别是:Port.
2022-03-30 16:52:48
526
原创 postgresql源码(五)——Planer(查询规划模块)(下)
查询规划的主要工作由grouping_planner函数完成。在具体实现的时候,针对postgresql中独有的继承表,程序使用inheritance_planner函数来解决,该函数主要是先将继承表的继承关系变换为非继承表来处理,然后仍然调用的是grouping_planner函数来完成查询规划的工作。3.查询规划处理这里大家真的要做好准备,因为grouping_planner函数本身就有将近1000行~那什么,我们还是先上图吧。有图更清楚,文字太多大家也会晕的。以下是grouping_pla
2022-03-30 16:47:46
479
原创 postgresql源码(四)——Planer(查询规划模块)(上)
1.查询规划模块总体概况废话不多说,我先上图。下图大概的刻画了查询规划模块里主要的函数调用关系,当然啦,最下层只画到主处理函数,主处理函数内部的调用关系在介绍每个主处理函数的时候再细细的说吧。我简单介绍下吧。exec_simple_query函数是负责查询处理的主函数,在进行查询规划之前,它已经调用了查询分析和查询重写模块。还记得上一篇博文的查询重写模块么?该模块返回的是重写后的查询树链表。这里exec_simple_query函数将重写后的查询树链表交给查询规划模块进一步处理。查询规划模块的入
2022-03-30 16:41:21
701
原创 postgresql源码(三)——Rewrite(查询重写模块)
原文上一篇博文我们阅读了postgresql中查询分析模块的源码。查询分析模块对前台送来的命令进行词法分析、语法分析和语义分析后获得对应的查询树(Query)。在获得查询树之后,程序开始对查询树进行查询重写处理。这一篇文章我们进入查询重写模块源码的阅读。还记得上一篇文章的那张函数调用关系图么?不记得没关系,我再放一遍。上次的查询分析模块走了1~7这些步骤。而查询重写模块即如上图的标记所示,函数pg_rewrite_query是进行查询重写处理的入口函数。该函数定义在s..
2022-01-31 13:49:37
897
原创 postgresql源码(二)——Parser(查询分析模块)
非我在2016-11-09原文上篇博客简要的介绍了下psql命令行客户端的前台代码。这一次,我们来看看后台的代码吧。十分不好意思的是,上篇博客我们只说明了前台登陆的代码,没有介绍前台登陆过程中,后台是如何工作的。即:后台接到前台的连接请求后发生了什么?调用了哪些函数?启动了哪些进程?那么,我们就先讲讲后台的工作流程吧。1.postgresql后台工作流程这里首先我们要知道postgresql是典型的“Server/Client”的模式。即服务器后台有一个主进程(p..
2022-01-31 13:41:37
1094
dbvis_windows_8_0_6
2014-05-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人