PostgreSQL并行hash join解读
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;
相关文章