您的位置:首页 > 其它

gp如何处理查询请求

2013-10-19 20:37 363 查看
【查询计划和调度】
查询处理顺序:1. 用户查询请求 2. Master(解析sql、优化sql)3. Master把任务分配到各个Segment执行4. 每个segment负责查询自己本节点数据(执行的操作包括:table scan、join、aggregations、sort) 这些都是同时并行执行的、而且都是独立的。 如果某个查询只涉及到单个segment的数据的话,master是不会分配到所有的segment,仅仅是分配至该segment。例如: 单行的增删改查、通过表的分布键过滤后的少量结果集...等等5. 查询的结果返回给master6. master再发送给用户

(图: 执行计划-多个segment)





(图: 执行计划-单个segment)
【查询计划】查看Query Plan的时是从底至上的。Motion -- 主要是涉及到多个节点之间完成任务的话,节点之间会发生数据移动。
Slice -- GP在执行查询时为了获得最优性能,把任务进行了切片。一个查询计划是根据motion来进行切分的,每个slice以motion作为边界。
Redistribute Motion -- Segment之间移动数据。这个是非常之消耗性能的。在前期表设计的时候就要避免这样的操作。Gather Motion -- Segment将数据传给Master。不是所有的查询计划都调用gather motion。例如:CREATE TABLE AS SELECT ...这个就没有gather motion,结果被存储到新表里面是不需要经过master的。eg:SELECT customer,amount FROM sales JOIN customer USING (cust_id) WHERE dateCol = '03-06-2012'; 查询计划如下图:

(图: 查询计划切片)【并行查询】Query Dispather(QD) -- Master节点查询任务处理,负责创建和分配查询计划、收集传送最终结果Query Executor(QE) -- Segment节点查询处理,负责完成数据的计算、多个QE之间的中间结果通讯。为查询计划的每个slice会被分配到至少一个worker processGangs -- 工作于相同slice的查询计划的相关process。当一个slice任务完成后,这个gang会把数据向上级gang传递。内部通信是通过内部进程来控制的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐