postgresql源码分析
文章平均质量分 69
源码
拾牙慧者
会点c++、python;
展开
-
Postgresql的HashJoin状态机流程图整理
状态机可以放大观看。HashJoinStateHash Join运行期状态结构体typedef struct HashJoinState{ JoinState js; /* 基类;its first field is NodeTag */ ExprState *hashclauses;//hash连接条件 List *hj_OuterHashKeys; /* 外表条件链表;list of ExprState nodes */原创 2021-08-04 22:52:47 · 743 阅读 · 1 评论 -
postgresql对于HashJoin算法的Data skew优化与MCV处理
Data skew 很好理解,即数据倾斜。现实中的数据很多都不是正态分布的,譬如城市人口,东部沿海一个市的人口与西部地区一个市地区的人口相比,东部城市人口会多好几倍。postgresql的skew的优化核心思想是"避免磁盘IO"。优化器往往会选择小表和正态分布的表做inner table,这会导致 outer table要不更大,要不是非正态分布。如果outer table的表是非正态分布的话,会在batch0来处理那些most common value(MCV)大致过程如下:1、prepare s原创 2021-07-31 16:40:54 · 553 阅读 · 0 评论 -
Postgresql多线程hashjoin(inner join)
build hash tablepg11,buildhashtable阶段:1、每个worker并行扫描部分inner_table。2、在共享内存中并行build一个hash表3、每个worker并行地扫描outer_table,并行执行join probe操作需要注意的是,在join之前,需要通过barrier机制,先完成自己build操作的线程需要等待hashtable被完整build后才能进入下一步的probe状态。multipleBatch的probe与hash1、并行扫描inner_原创 2021-07-20 23:06:25 · 1338 阅读 · 0 评论 -
Postgresql中的hybrid hash join(无状态机讲解)
hybrid hash joinhybrid hash join是基于grace hash join 的优化。在postgresql中的grace hash join 是这样做的:inner table太大不能一次性全部放到内存中,pg会把inner table 和outer table按照join的key分成多个分区,每个分区(有一个inner table子部分也有一个outer table的子部分)保存在disk上。再对每个分区用普通的hash join。每个分区称为一个batch,通过join k原创 2021-07-31 16:07:16 · 1033 阅读 · 1 评论