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传递。内部通信是通过内部进程来控制的。
查询处理顺序: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传递。内部通信是通过内部进程来控制的。
相关文章推荐
- 如何处理Oracle客户端查询乱码问题
- 如何ASP.NET Core Razor中处理Ajax请求
- 如何处理大数据量的查询(valueListHandler,ValueList组件)
- Nodejs处理GET请求中参数和查询参数的不同
- IIS是如何处理ASP.NET请求的
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
- IIS是如何处理ASP.NET请求的
- IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求
- 数据库如何提高处理查询速度
- 如何处理大数据量的查询
- 如何处理大数据入库和查询问题
- IIS是如何处理ASP.NET请求的
- IIS是如何处理ASP.NET请求的
- 6.3 x86处理器如何处理MSI-X中断请求
- tomcat会如何处理请求
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- SQL Server如何查询当前服务器有多少连接请求
- IIS是如何处理ASP.NET请求的
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法