- 博客(46)
- 资源 (21)
- 收藏
- 关注
原创 Cloudberry (十) 半连接Semi-join
当然,这种情况通常不是一个问题,如果是并行度很大用户可以调整,如果是segment的数量占到了16位那么多,这么大规模的集群至少我还没在生产环境见过。在解决了占位空间问题后,在执行器层面,我们需要具体的生成RowIdExpr。首先,在优化器阶段,我们要构建 DEDUP_SEMI,DEDUP_SEMI_REVERSE 计划,这里的改动主要是分布数据的相融性,保证数据分布正确。与Greenplum相比,这里的复杂性在于,在并行的情况下,一个segment 上会有多个进程并行的进行RowIdExpr的生成。
2026-10-08 17:50:45
228
原创 postgresql -- 索引Blink-Tree并发原理
索引是数据库系统最重要也是最复杂的模块之一, 简单介绍了PostgeSQL中索引与B-Tree的差异,并明确了Blink-Tree的加锁机制和规则。
2026-07-12 21:09:24
228
原创 postgresql -- 性能参数&视图
本文详细介绍了PostgreSQL关键性能参数的配置建议与调优方法论。重点包括:内存相关参数(shared_buffers、work_mem等)的合理设置原则,强调PostgreSQL特有的双层缓存架构;WAL与检查点参数的优化方向,平衡写入性能与恢复时间;连接管理和并行查询的最佳实践;常见配置误区及正确的调优步骤。文章指出参数调优应建立在SQL优化之后,并提供生产环境必备的安全参数清单。最后强调PostgreSQL没有万能配置模板,需根据具体硬件和业务特点进行调整验证。
2026-06-27 10:41:19
428
原创 Cloudberry (九) 分布式事务 insert 语句
default 的数值是 0,如果是 0 就是用异步方式,大概就是用 connect 做连接,然后 poll 做 socket 的异步监控,直到最后把所有连接都建立好,把 fd 存好。读到以后,发现"firstchar == 'Q'",所以这是一个 libpq 的 simple query,经过 query statement 的 parsing 工作,发现是一个单独的 begin 命令,就在本地执行了 BeginTransactionBlock。后面的函数就是在发送具体的命令,就是 Begin 命令。
2026-03-20 11:23:31
409
原创 Cloudberry (八)性能监控
日常运维需要 监控CPU、内存、磁盘、数据库活动、查询性能等。需要考虑到Cloudberry是一个分布式数据库,基于PostgreSQL,通常运行在多台主机上(master和segments)。所以监控可能包括对集群的监控,使用gpstate、gpconfig等工具,也可能包括系统级别的监控。需要写出一个shell脚本,可能收集一些关键指标并输出。由于没有具体指定监控内容,我们可以提供一个全面的脚本,检查系统资源(CPU、内存、磁盘)、Cloudberry进程状态、数据库大小、活动会话、慢查询、锁等。
2026-03-12 11:00:22
382
原创 Cloudberry (七)二级索引
因此,在创建索引时,需要权衡索引带来的性能提升与其维护成本。- **二级索引**:二级索引(非聚集索引)将数据与索引分开存储,索引的叶子节点包含指向实际数据行的指针。- **二级索引**:二级索引适合于点查询和快速查找特定列的值,但在范围查询时可能不如主索引高效,因为需要通过索引找到主键,再通过主键找到实际数据(回表查询)。- **主索引**:主索引(聚集索引)将数据存储与索引放在一起,索引的叶子节点直接包含行数据。- **二级索引**:二级索引是在表的非主键列上创建的,用于加速对特定列的查询。
2025-02-15 18:13:30
391
原创 Cloudberry (六)SPI拓展功能
2. **接口函数**:SPI提供了一组接口函数,如`SPI_connect`、`SPI_execute`、`SPI_finish`等,这些函数用于建立与SPI管理器的连接、执行SQL命令以及释放连接。- 正确管理SPI使用过程中的资源。5. **扩展性**:SPI的实现使得开发者可以创建自定义的数据库扩展(Extension),通过这些扩展可以在数据库中执行复杂的逻辑和操作。3. **事务管理**:SPI模块具备事务管理能力,这意味着在执行的SQL语句中,如果发生错误,事务会自动回滚,确保数据的一致性。
2025-02-15 18:03:10
590
原创 Cloudberry (四)并行执行
这条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
990
原创 Cloudberry(五)内存管理
Greenplum通过`vm.overcommit_memory`和`vm.overcommit_ratio`内核参数来管理内存分配,建议将`vm.overcommit_memory`设置为2,以确保安全的内存分配。1.**使用jemalloc内存分配器**:Greenplum默认使用jemalloc作为内存分配器,它通过减少内存碎片和优化内存分配策略,显著提升了程序的性能,特别适用于多线程和高并发环境。例如,查询执行过程中会根据需要分配和释放内存,以提高内存使用效率。
2025-01-11 10:05:19
509
原创 Cloudberry (三)布隆过滤器的 RuntimeFilter
一种是:新增了RuntimeFilter算子,在Hash Join算子的探测端添加RuntimeFilter算子,当然这就导致仅在RuntimeFilter算子 bloom bitmap 实现提前过滤,并未将filter下沉到SeqScan算子或者TableAM层,仍旧存在不必要的算子计算。由此,可见这种方式实现原理上比较完善,可以尽可能的减少中间算子的计算。4)可以看到,这种运行时过滤方式,仅将过滤下沉了一个执行节点,底层节点的扫描等多层执行计划节点并没有最优地避免执行,效果也不会太好。
2024-12-14 20:53:41
1022
原创 Cloudberry(二) 演化路线图
CloudberryDB 制定了演化路线图并在逐步改进,这是 Cloudberry Database 发挥独特价值之处。计划、正在进行或已完成的一些工作。
2024-12-14 20:36:27
1013
原创 Cloudberry(一)安装分布式数据库集群
将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
1930
原创 postgresql -- 等待事件
等待事件是做性能优化、故障诊断的利器。Oracle数据库在7.3开始通过OWI提供了等待事件接口,自此开始,等待事件已经成为DBA分析数据库的最为重要的手段之一。PG及其相近与相兼容的数据库的等待事件 .
2024-09-06 22:02:51
450
1
原创 Greenplum 日常维护命令
评:这个说的不全面,vacuum分两种,一种是analize,优化查询计划的,还有一种是清理垃圾数据,postres删除工作,并不是真正删除数据,而是在被删除的数据上,坐一个标记,只有执行vacuum时,才会真正的物理删除,这个非常重用,有些经常更新的表,各种查询、更新效率会越来越慢,这个多是因为没有做vacuum的原因。评:少写了个analyze,如果只是explain,统计出来的执行时间,是非常坑爹的,如果希望获得准确的执行时间,必须加上analyze。-m:只列出mirror 实例的状态和配置信息。
2024-05-18 11:14:52
782
原创 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
507
原创 Postgres-XL 10 使用介绍(二)
#### 5.3 Constraints数据类型是一种限制可以存储在表中的数据类型的方法。 但是,对于许多应用程序,它们提供的约束过于粗糙。 例如,包含产品价格的列可能只应接受正值。 但是没有标准的数据类型只接受正数。 另一个问题是,您可能希望相对于其他列或行约束列数据。 例如,在包含产品信息的表中,每个产品编号应只有一行为此,SQL允许您定义列和表的约束。 约束使您可以根据需要尽可能多地控制表中的数据。 如果用户尝试将数据存储在违反约束的列中,则会引发错误。 即使该值来自默认值定义,也是如此。#####
2022-06-19 10:48:41
719
原创 Postgres-XL 10 使用介绍(一)
Postgres-XL 是一个基于PostgreSQL的一个开源项目,在此基础上提供可扩展的写入操作和大批量的并行处理.并且它是一个数据库组件集合体,可以将其安装在多个操作系统或虚拟机上.
2022-06-19 10:42:57
1483
原创 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
2840
原创 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
416
原创 postgresql源码(十五)——Executor(查询执行模块之——control节点(上))
控制节点控制节点用于完成一些特殊的流程执行方式。由于PostgreSQL为査询语句生成二叉树状的査询计划,其中大部分节点的执行过程需要两个以内的输入和一个输出。但有一些特殊的功能为了优化的需要,会含有特殊的执行方式和输人需求(例如对于update、INSERT和DELETE,在普通的SELECT基础上有一个ModifyTable节点,UNION操作在一个计划节点就执行多个表(大于2)的合并,Append节点并未把UNION涉及的多个表放在孩子节点中,而是将这些表组成一个链表放在Append节点的appe
2022-04-13 19:59:21
386
原创 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
650
原创 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
713
原创 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
543
原创 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
517
原创 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
460
原创 postgresql源码(九)——Executor(Scan节点(上))
从前面介绍的可优化语句处理相关的背景知识、实现思想和执行流程,不难发现可优化语句执行的核心内容是对于各种计划节点的处理,由于使用了节点表示、递归调用、统一接口等设计,计划节点的功能相对独立、代码总体流程相似,下面介绍执行器中各种计划节点的相关执行过程。在PostgreSQL中,计划节点分为四类,分别是控制节点(Control Node)、扫描节点(ScanNode),物化节点(Materialization Node)、连接节点(Join Node) 。 控制节点:是一类用于处理特殊情况的节点,用
2022-03-30 17:15:18
769
原创 postgresql源码(八)——Executor(可优化语句的执行)
2.可优化语句的执行可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理。该模块对外提供了三个接口: ExecutorStart、ExecutorRun 和 ExecutorEnd,其输入是包含査询计划树的数据结构QueryDesc,输出则是相关执行信息或结果数据。如果希望执行某个计划树,仅需构造包含此计划树的QueryDesc,并依次调用ExecutorStart、ExecutorRun、ExecutorEnd 3个过程即能完成相应的处理过程。从我
2022-03-30 17:02:49
680
原创 postgresql源码(七)——Executor(数据定义语句的执行)
1.数据定义语句的执行数据定义语句(也就是之前我提到的非可优化语句)是一类用于定义数据模式、函数等的功能性语句。不同于元组增删査改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数。数据定义语句的执行流程最终会进入到ProcessUtility处理器,然后执行语句对应的不同处理过程。由于数据定义语句的种类很多,因此整个处理过程中的数据结构和方式种类繁冗、复杂,但流程相对简单、固定。这里我们以Create table为例说明数据定义语句的具体处理过程。1.1数据定义语句执行流程由于P
2022-03-30 16:57:51
377
dbvis_windows_8_0_6
2014-05-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅