尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【赵渝强老师】PostgreSQL的并行查询

【赵渝强老师】PostgreSQL的并行查询
📅 发布时间:2026/6/20 7:28:39

1

​PostgreSQL数据库能设计出利用多CPU让查询更快的查询计划。这种特性被称为并行查询。对于那些可以从并行查询获益的查询来说,并行查询带来的速度提升是显著的。很多查询在使用并行查询时比之前快了超过两倍,有些查询是以前的四倍甚至更多的倍数。那些访问大量数据但只返回其中少数行给用户的查询最能从并行查询中获益。

image.png
点击这里查看视频讲解:【赵渝强老师】PostgreSQL的并行查询

一、 并行查询如何工作

PostgreSQL的并行化包含三个重要组件:进程本身(Leader进程)、Gather、Workers。没有开启并行化的时候,进程自身处理所有的数据;一旦计划器决定某个查询或查询中部分可以使用并行的时候,就会在查询的并行化部分添加一个Gather节点,将Gather节点作为子查询树的根节点,并根据并行查询的参数设置创建相应的Worker节点;最终由Worker节点执行相应的并行查询功能。PostgreSQL并行查询的工作原理如下图所示。

2

查询执行是从Leader进程开始。一旦开启了并行或查询中部分支持并行,就会分配一个gather节点和多个Worker线程。相关联的Blocks在各个Worker线程之间划分。Worker的数量受PostgreSQL的配置参数控制。Worker之间使用共享内存相互协调和通信,一旦Worker完成了自己的工作,结果就被传给了Leader进程。

二、 何时会用到并行查询?

要了解并行查询之前,首先介绍一下顺序扫描。下面通过一个例子来说明。

(1)创建一张表并插入数据,执行一个简单的查询,并输出执行计划。

mydemodb=# create table testtable1(tid int,tname varchar(20));
mydemodb=# insert into testtable1 values(0,'aaaa');
mydemodb=# explain select * from testtable1;# 输出的信息如下:QUERY PLAN                           
---------------------------------------------------------------Seq Scan on testtable1  (cost=0.00..22.70 rows=1270 width=36)
(1 row)# 这里的Seq Scan表示顺序扫描。

(2)现在往表中插入5千万条数据。

mydemodb=# insert into testtable1 select n,'myname_'||n from generate_series(1,50000000) n;

(3)执行下面的查询,并输出执行计划

mydemodb=# explain analyze select * from testtable1 where tname ='myname_10';# 输出的信息如下:QUERY PLAN                      
-------------------------------------------------------------------Gather  (cost=1000.00..687114.39 rows=1 width=19) (actual time=0.224..1884.530 rows=1 loops=1)Workers Planned: 2Workers Launched: 2->  Parallel Seq Scan on testtable1(cost=0.00..686114.29 rows=1 width=19) (actual time=2370.242..4742.404 rows=0 loops=2)Filter: (tname = 'myname_10'::text)Rows Removed by Filter: 25000000Planning Time: 0.051 msExecution Time: 1884.549 ms其中:
(*)Workers Planned: 2 表示执行查询预估的并行进程数
(*)Workers Launched: 2表示实际启动的并行进程数
(*)Parallel Seq Scan on testtable1表示对表进行了并行的顺序扫描

(4)关闭并行查询,并重新生成上面的执行计划。

mydemodb=# set max_parallel_workers_per_gather = 0;
mydemodb=# explain analyze select * from testtable1 where tname ='myname_10';# 输出的信息如下:QUERY PLAN                      
-----------------------------------------------------------------Seq Scan on testtable1  (cost=0.00..943470.90 rows=1 width=19) (actual time=0.028..3608.929 rows=1 loops=1)Filter: (tname = 'myname_10'::text)Rows Removed by Filter: 49999999Planning Time: 0.215 msExecution Time: 3608.948 ms# 从这里的测试可以得出结论:
# 开启了并行查询耗时1884毫秒;
# 关闭并行查询后,耗时3608毫秒。性能降低了一倍。

下表列举出了影响并行查询的相关参数及其含义。

3

相关新闻

  • 企业CI/CD选型指南:提效与安全如何兼得?CCI破解企业研发“不可能三角”
  • 最新昆明婚纱摄影星级排名新鲜出炉:三大优质机构深度测评+避坑指南 - charlieruizvin
  • 我与C++的初遇:一段跨越时光的编程情缘

最新新闻

  • 周口市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 乐秀视频剪辑器永久会员版:专业级视频剪辑工具全功能解锁
  • 推理模型落地实战:从思维链到工业级可信推理系统
  • 2026年兰州市PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • YOLO12模型WebUI自动化测试与CI/CD实践:从Selenium到Jenkins全流程解析
  • 三明市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号