分布式查询
=====

OceanBase 数据库实现了像传统的关系型数据库一样的完整 SQL 查询引擎，当 SQL 请求到了 OBServer 服务端，经过语法解析、语义分析、查询重写、查询优化等一系列过程后，再由查询执行器来负责执行。所不同的是，在分布式数据库里，查询优化器会依据数据的分布信息生成分布式的执行计划。

如果查询涉及的数据在多台服务器，需要走分布式计划，这是 OLAP 分析型数据库的典型场景。OLAP 场景是十分考验查询优化器能力的场景，OceanBase 数据库的查询优化器做了很多优化，诸如算子下推、智能连接、分区裁剪等。同时由于这种查询涉及的数据量往往比较大，OceanBase 数据库的查询执行引擎也做了并行处理、任务拆分、动态分区、流水调度、任务裁剪、子任务结果合并、并发限制等等优化技术。这些优化技术使得 OceanBase 数据库很好的支持了 OLAP 场景的复杂查询处理能力。

分布式执行过程可划分为三个阶段：

1. 生成 job 树：将分布式计划拆分为多个子计划，每个子计划由一个 job 进行封装，多个 job 间的父子关系继承自相关算子间的父子关系，最终构成 job 树。
2. 调度 job：主要确定每个 job 的执行时机。
3. 执行 job：主要控制每个 job 的 task 拆分，以及每个 job 的多个 task 的执行顺序，并执行发送 task、接收 task 执行结果、处理执行错误等操作。

