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

本文涉及的产品
RDS AI 助手,专业版
PolarDB Agent Express,2核4GB
云数据库 PolarDB MySQL 版,列存表分析加速 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
JSON 人工智能 API
如何用 Python 调用 任何 API(万能通用方法,一看就会)
我给你最简单、通用、万能的教程,不管是淘宝、京东、小红书、天气、支付、第三方接口,全部一套代码通用。
|
SQL 存储 关系型数据库
详解 SQL 中的 UNION、MINUS 和 INTERSECT 命令
【8月更文挑战第31天】
1392 0
|
Web App开发 算法
软件破解初级实例教程(附工具附图)
最近在群里总是看到很多新朋友在问: 1、“新手怎么学破解啊?”(这是标准的伸手党,baidu google其实很好用) 2、“哎呀XX大牛,我什么基础都没有啊我不会汇编,不会C更不会C++还不会…………总之高手会的我都不会,我能学么?”(明确的告诉你,你能!你不和唐僧一样罗嗦的话你一定能。
12593 1
|
存储 算法 编译器
【C++ 泛型编程 进阶篇】C++模板元编程深度解析:探索编译时计算的神奇之旅
【C++ 泛型编程 进阶篇】C++模板元编程深度解析:探索编译时计算的神奇之旅
2241 1
|
Cloud Native IDE Java
阿里巴巴正式开源云原生应用脚手架
云原生应用脚手架是一款基于 Spring Initializr 项目基础之上,支持多种工程架构、提供代码示例片段、组件更丰富、生态更开放的一款脚手架。其致力于在当下云原生时代,为广大开发者提供更简单、更高效的项目构建体验。
阿里巴巴正式开源云原生应用脚手架
|
关系型数据库 数据库管理 MySQL
MySQL 小心使用 replace into
MySQL replace into 错误案例 背景 * MySQL5.7 * ROW模式 * 表结构 CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `col_1` varc
10104 0
|
JavaScript
js中=,==,===和 != 和 !==的区别和使用
js中=,==,===和 != 和 !==的区别和使用
417 1
|
存储 监控 AliSQL
RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化
RDS MySQL使用AliSQL内核,为用户提供了MySQL所有的功能,同时提供了企业级的安全、备份、恢复、监控、性能优化、只读实例、Serverless等高级特性
4056 3
RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化