PgSQL · 新特征 · PG11并行Hash Join介绍

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 关键字Parallelized, Parallel-aware hash joins摘要本文将介绍一下PostgreSQL 11 beta 1 新增的全并行Hash join特征。 将给读者介绍一下postgreSQL并行的设计与实现,并分析一下PostgreSQL的全并行hash join的设计与实现细节。

关键字

Parallelized, Parallel-aware hash joins

摘要

本文将介绍一下PostgreSQL 11 beta 1 新增的全并行Hash join特征。 将给读者介绍一下postgreSQL并行的设计与实现,并分析一下PostgreSQL的全并行hash join的设计与实现细节。

1.0 并行背景简介

PostgreSQL 从9.6版本开始提供并行特征,并在后续的版本中不断的迭代晚上对各种功能的并行支持。 20180627161744.png

20180627161708.png

上图:描述并行各个版本中的支持 本文将给主要给大家介绍一下hash join和并行创建索引的实现。

2.0 PostgreSQL并行设计与实现

简单讲PostgreSQL通过在查询计划当中引入gather和gatherMerge算子来决定是否在查询树中开始并行执行的部分。在执行gather或ganterMerge节点的时候,这两个节点就成为起停并行执行的出入口节点。 ppic.jpg

上图显示了查询怎样从原来的执行计划,通过gather节点实现并行执行的演变过程。其中gather是并行分发/汇总节点。gatherMerge是用来实现分发/按顺序汇总执行的节点。在执行的gather节点的时候,它会初始化并行执行所需要的资源,以及并行控制结构。并启动并行worker开始工作,通过共享内存来接受worker返回的数据。

3.0并行Hash Join

关于并行hash join的支持,在之前的版本已经有对hash join的并行支持,但是对于hash join并行并没有做的很彻底。之前只是在外表部分实现了并行。 内表处理是在每一个并行分支上面都做一份完整的hash表。在11版本中实现了内表部分的并行处理。

3.1并行Hash Join实现步骤

3.1.1 Hash Join状态机

并行hash join的实现与非并行的hash join大致上是一致的。可以共用一套状态机如下: hj状态机2.png

3.1.2 Hash Table状态机

在PostgreSQL 11版本中,主要增加了并行构建hash table的实现。其中关于hash table构建的状态机如下: ht状态机.png

每个参与并行hash join的并行任务,它必须能够知道当前自己已经完成了多少工作,因为并行任务并不需要等待其他任务一同开始。因此在任务的一些关键节点上我们需要同步所有任务的状态,确定所有任务都到这这个点之后,然后启动下一个状态的任务。这里并行用一系列屏障机制来协调并行任务的同步进入下一状态并开始执行。

其中并行Hash INNER步骤根据需要实际数据的大小可能会调整batch和bucket中tuple的数据。状态机如下:

3.1.2.1 Batch扩展:

batch.png

3.1.2.2 Bucket扩展:

bucket.png 分别使用两组屏障独立处理batch和bucket的扩展;

3.1.2.3PHJ_BUILD_HASHING_OUTER阶段

关于PHJ_BUILD_HASHING_OUTER阶段,仅仅当多个batch joins的时候会用到,因为这里我们需要讲outer表也按照同样的方式hash到相对应得batch,这样就可以独立的处理每一个batch。

4.0 总结

这篇文章主要是high level的给大家介绍了一下并行全hash join如何实现,后续如果有时间会继续分析更加详细的实现细节。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
数据采集 Oracle 关系型数据库
kettle开发-循环驱动作业
kettle开发-循环驱动作业
937 0
|
存储 监控 Kubernetes
『Skywalking』.NET Core快速接入分布式链路追踪平台
📣读完这篇文章里你能收获到 - .NET Core接入Skywalking - 了解Skywalking的整体架构设计 - 了解Skywalking的各项技术指标怎么看 - 生产部署时的坑全跳过 - 感谢点赞+收藏,避免下次找不到~
1552 1
『Skywalking』.NET Core快速接入分布式链路追踪平台
|
JavaScript 前端开发 数据库
Kettle使用脚本实现循环(十)
Kettle使用脚本实现循环(十)
2183 0
Kettle使用脚本实现循环(十)
|
安全 算法 网络安全
一文读懂 RSA 加密:非对称加密的基石
RSA是应用最广泛的非对称加密算法,由Rivest、Shamir和Adleman于1977年提出。它基于大数分解难题,使用公钥加密、私钥解密,解决密钥分发问题,广泛用于HTTPS、数字签名等安全通信场景,是现代网络安全的基石之一。
2468 0
|
6月前
|
缓存 负载均衡 算法
合理选择任务调度的路由策略,可以帮助降本 50%
任务调度系统在处理短周期任务时,路由策略对执行器负载均衡至关重要。不同策略适用于不同场景:轮询确保平均分配,随机依赖概率,LFU/LRU基于使用频率或时间,一致性哈希保障节点变化时的稳定性,而负载最低优先与任务权重策略则更智能地应对资源消耗差异。合理选择路由策略可显著提升系统性能与资源利用率。
517 34
合理选择任务调度的路由策略,可以帮助降本 50%
|
8月前
|
前端开发 API 开发者
一键抠图有多强?19Kstar 的 Rembg 开源神器,5 大实用场景颠覆想象!
Rembg是一款基于Python的开源抠图工具,利用深度学习模型(U-Net/U-2-Net)实现高质量背景移除。它支持命令行、Python API、服务端API及插件等多种形式,适用于电商商品图、社交头像优化、设计项目图像等场景。凭借高精准度、即插即用特性和全面生态,Rembg在GitHub上已获19.1K星,成为开发者社区中的热门工具。其本地部署特性确保数据隐私,适合专业与商业环境使用。项目地址:https://github.com/danielgatis/rembg。
2392 24
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
2157 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
JavaScript
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
文章详细介绍了在Vue项目中安装和使用`vue-quill-editor`的步骤,包括如何通过npm安装、局部挂载、在Vue页面中引入和配置使用。同时,还提供了如何实现图片的缩放和拖拽功能的进阶教程,涉及到安装额外的插件`quill-image-drop-module`和`quill-image-resize-module`,以及对Webpack配置的调整。最后,文章还提供了实际效果展示和一些后续可能的拓展功能,如上传视频和将图片上传到服务器等。
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
|
算法 C# 数据安全/隐私保护