0

0

postgresql并行聚合如何执行_postgresql聚合并行模式

舞姬之光

舞姬之光

发布时间:2025-11-21 21:11:02

|

355人浏览过

|

来源于php中文网

原创

并行聚合通过主进程协调多个工作者并行处理数据分片,各自执行局部聚合后由主进程合并结果。其执行需满足表足够大、使用顺序扫描、聚合函数可分割及无阻塞并行元素等条件,并受max_parallel_workers_per_gather等参数控制,通过EXPLAIN可查看Gather与Parallel Seq Scan判断是否启用。

postgresql并行聚合如何执行_postgresql聚合并行模式

PostgreSQL 中的并行聚合(Parallel Aggregation)是查询执行优化的重要特性,它允许数据库在多核 CPU 环境下利用多个工作进程同时处理聚合操作,从而提升大规模数据统计的性能。理解其执行机制和启用条件,有助于合理设计查询与索引。

并行聚合如何执行

当 PostgreSQL 执行一个包含聚合函数(如 SUMCOUNTAVG 等)的查询,并且数据量较大时,优化器会评估是否使用并行模式来加速扫描和部分聚合计算。

并行聚合的执行流程大致如下:

  • 主进程(Leader Process)启动后,根据表大小、系统资源和参数设置决定是否开启并行执行。
  • 创建若干个并行工作者(Parallel Workers),每个工作者扫描表的一个数据块。
  • 每个工作者在其负责的数据范围内进行“局部聚合”(Partial Aggregation),例如各自计算一部分的 COUNTSUM
  • 局部结果被发送回主进程,主进程对这些中间结果进行“最终聚合”(Final Aggregation),合并成最终结果。

这种分而治之的方式显著减少了单线程处理的压力,尤其适用于全表扫描类的大数据量聚合查询。

聚合并行模式的启用条件

并非所有聚合查询都能自动使用并行模式。要使 PostgreSQL 启用并行聚合,需满足一系列前提条件:

  • 表足够大:只有当顺序扫描的成本较高时,优化器才会考虑并行。小表通常不会触发并行。
  • 支持并行扫描的访问方法:目前主要是堆表的顺序扫描支持并行。如果查询走了索引扫描(Index Scan),默认不支持并行。
  • 聚合函数是“可分割的”:像 SUMCOUNT 这样的函数可以拆分为部分计算再合并;但某些复杂函数或用户自定义聚合可能无法并行化。
  • 查询中没有阻塞并行的元素:例如使用了 FOR UPDATE、存在 volatile 函数、或设置了 parallel_safe = false 的函数。

关键配置参数

PostgreSQL 提供多个 GUC 参数控制并行行为:

云从科技AI开放平台
云从科技AI开放平台

云从AI开放平台

下载
  • max\_worker\_processes:系统最大并行进程数,影响整体并发能力。
  • max\_parallel\_workers\_per\_gather:每个 Gather 节点最多使用的并行工作者数量,例如设为 4,则最多启动 4 个 worker。
  • parallel\_setup\_costparallel\_tuple\_cost:用于评估并行开销,调整它们可影响优化器选择并行的倾向。
  • min\_parallel\_table\_scan\_sizemin\_parallel\_index\_scan\_size:设置表或索引扫描达到多大体积才考虑并行,默认为 4MB 左右。

适当调大 max\_parallel\_workers\_per\_gather 可提升聚合性能,但需结合 CPU 核心数合理设置,避免资源争抢。

查看是否启用并行聚合

使用 EXPLAINEXPLAIN ANALYZE 可观察执行计划中是否有并行操作:

Gather Workers Planned: 3 -> Partial Aggregate -> Parallel Seq Scan on sales_table Filter: sale_date > '2023-01-01'

上述执行计划显示启用了 3 个并行工作者,进行局部扫描和聚合,主进程通过 Gather 收集结果完成最终聚合。

基本上就这些。只要数据量够大、查询结构合适,并且参数配置得当,PostgreSQL 就能自动启用并行聚合来提速。关键是理解它的触发机制和限制条件,避免误以为“应该并行却没并行”。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

c++中volatile关键字的作用
c++中volatile关键字的作用

本专题整合了c++中volatile关键字的相关内容,阅读专题下面的文章了解更多详细内容。

76

2025.10.23

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

164

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1007

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

214

2023.11.16

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

1

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
大数据(MySQL)视频教程完整版
大数据(MySQL)视频教程完整版

共200课时 | 19.3万人学习

PHP会话控制/文件上传/分页技术
PHP会话控制/文件上传/分页技术

共22课时 | 2.2万人学习

马哥初级运维视频教程
马哥初级运维视频教程

共80课时 | 20.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号