1、Greenplum Database 的分布式查询优化吕正华Pivotal Inc.内容安排Greenplum Database架构分布式查询计划和分布式执行器如何修改Planner生成分布式查询计划其他关于分布式查询计划的细节Greenplum Database架构Greenplum是多个Postgres实例(segment)构成的集群 一个segment作为Master,其余的是数据节点(也负责计算)Share Nothing架构,不同的segment直接没有数据共享Catalog在Master上是完整的,Segment上也维护一部分StandBy和Mirror也是segment,和Mas
2、ter,Primary在不同机器gp_segment_configuration维护了集群的架构信息Greenplum Database架构gp_segment_configuration为什么需要MPP架构MPP(Massively Parallel Processing)数据量太大,单机存不下,因此只能将数据分片存到不同机器数据量太大,期待靠并行计算提升性能,因此需要分布式执行 MPP数据库必须解决的问题数据分片策略(Greenplum支持hash,random,replicated)分布式查询计划(Locus,Motion)分布式执行器(Slice,Gang,Dispatch)简单的执行
3、策略在master上利用做出单机的查询计划,下发到各个segment执行Master汇总各segment结果会返回给客户端类似中间件,支持的查询比较简单(不涉及到跨segment数据连接)复杂查询(join,agg等)如汇总到单机执行效率太低分布式查询例子分布式执行器必然涉及到多组进程协同工作必须正确处理多组进程之间的数据通信分布式查询计划SPMD(single program,multiple data)查询计划切片查询计划能描述数据通信典型的Greenplun分布式执行流程分布式类型系统:locus分布式查询计划需要对数据分布建模Greenplum引入locus的概念基础表的scan pa
4、th的locus从分布策略中获取gp_distribution_policyMotion path可以改变locus类型locus可以看做是path的分布式意义下的类型在Postgres的Path结构里加了locus结构自底向上推理每个path的locusLocus的种类和具体例子Locus的推理cdbpathlocus_from_baserel(由gp_policy设置tablescan的locus)Catalog:entryTable distributed replicated:seggeneralTable distributed by(c1):hash locusTable dist
5、ributed randomly:strewn locuscdbpathlocus_from_exprs(构建hash locus)cdbpathlocus_from_subquery从subplan获取locus利用plan的flow信息Motion path会改变locusGather motion:变成singleQE或者entryRedistribute motion:变成hash,或改变分布键Broadcast motion:变成replicatedJoin涉及到最复杂的locus推理,是分布式查询计划的重中之重Policy示例Catalog没有policy,发现rangetable
6、是catalog,locus设为entryPath locus示例小结:分布式查询第一步构建基础设施LocusPolicyFlow开发的技术新增catalog在Postgres关键数据新增字段推理和维护新增字段Motion path and Join path核心代码在函数cdbpath_motion_for_join本质是在处理分布式关系代数通过motion促成局部信息完备,这样不用考虑跨segment的连接pgpgeneral strewn=strewngeneral hash=hash generate_series(1,5)a joint on a=t.c-t randomly dis