PostgreSQL并行hash join解读

2020-06-17 00:00:00 并行 执行 内存 扫描 进程

PostgreSQL的并行查询简介

并行查询是 PostgreSQL 的一个大特性,对于单一sql查询,从传统单一进程,提升到多个进程协同完成。

并行查询使用了更多的cpu/mem/io资源,提高了任务的执行效率,在cpu=8以内执行效率线性增长。

并行查询设计的难点是需要协调多个worker进程间的同步:

1)在barrier点上多个进程需要全部前进到这个点上,比如:build inner hash table,必须等该状态完成了,所有的worker才能往下走;

2)在达到barrier点之前,多个进程的工作量尽量按照‘能者多劳’,执行快的进程多做一些工作量,比如:scan,build hash table,probe等;

3)此外,实现上要避免死锁,避免内存分配碎片,处理进程出错;

本文主要讲述并行查询中复杂的功能:paralle hash join。先从单进程的hashjoin逐步过渡到多进程并行的hashjoin。

从9.6和10版本就开始支持并行join,但是只支持outer table的并行;11版本支持outer和inner都并行执行;

并行hashjoin的执行计划

一个例子

select count(*)
  from lineitem
  join orders on l_orderkey = o_orderkey
 where o_totalprice > 5.00;

相关文章