本文介绍AnalyticDB MySQL版的查询处理流程和执行计划中的相关概念。
查询流程
AnalyticDB MySQL版使用SQL语言完成用户和系统内部存储数据之间的交互。SQL查询的执行计划生成流程如下:
- 客户端将SQL语句提交到AnalyticDB MySQL版的前端接入节点(即Controller节点)。更多关于接入节点的详情,请参见技术架构。
- Controller节点中解析器(Parser)会对SQL语句进行解析并生成语法树,然后生成初步逻辑执行计划。
- Controller节点中优化器(Optimizer)会评估是否需要对初步逻辑执行计划进行优化重写,并生成最终的逻辑执行计划(Plan),并根据数据是否需要在网络间传输来决定是否需要对计划进行切分。逻辑执行计划中会规定特定的执行处理方式,例如Join类型、Join顺序、聚合方式以及数据重分布方式等。
- 执行计划任务的节点(即Executor节点)会接收最终的逻辑执行计划并将其转化成物理执行计划。物理执行计划由Stage和算子(Operator)组成,物理执行计划中的算子(Operator)会对数据按照一定规则进行处理。
- Executor节点将数据处理的最终结果返回到客户端,或者写入AnalyticDB MySQL版集群的内部表以及其它外部存储系统(如OSS)中。
执行计划相关概念
了解以下概念能帮助您更好地分析AnalyticDB MySQL版的执行计划(即物理执行计划):
- Stage在执行阶段,AnalyticDB MySQL版中的查询会首先被切分为多个Stage来执行,一个Stage就是执行计划中某一部分的物理实体。Stage的数据来源可以是底层存储系统中的数据或者网络中传输的数据,一个Stage由分布在不同Executor节点上相同类型的Task组成,多个Task会并行处理数据。说明 AnalyticDB MySQL版SQL诊断功能支持对Stage级别进行结果诊断。更多详情,请参见Stage级别诊断结果。
- Task
Task是一个Stage在某个Executor节点上的执行实体,多个同类型的Task组成一个Stage,在集群内部并行处理数据。
- 算子(Operator)算子是AnalyticDB MySQL版的基本数据处理单元。AnalyticDB MySQL版会根据算子所表达的语义或算子间的依赖关系,决定使用并行还是串行执行来处理数据。说明 AnalyticDB MySQL版SQL诊断功能支持对算子级别进行结果诊断。更多详情,请参见算子级别诊断结果。
上图是一个典型分组聚合查询的处理流程,AnalyticDB MySQL版的Controller节点会把查询的逻辑执行计划(Plan)分片下发到执行计划任务的各个节点上,其中:
- Stage 2由4个Task组成,并行执行数据的扫描、过滤以及局部聚合等操作。
- Stage 1由2个Task执行,并行执行最终的聚合操作。
- Stage 0由1个Task执行,负责汇总Stage 1的2个Task生成的最终聚合结果。