OceanBase 数据库实现了像传统的关系型数据库一样的完整 SQL 查询引擎,当 SQL 请求到了 OBServer 服务端,经过语法解析、语义分析、查询重写、查询优化等一系列过程后,再由查询执行器来负责执行。所不同的是,在分布式数据库里,查询优化器会依据数据的分布信息生成分布式的执行计划。
如果查询涉及的数据在多台服务器,需要走分布式计划,这是 OLAP 分析型数据库的典型场景。OLAP 场景是十分考验查询优化器能力的场景,OceanBase 数据库的查询优化器做了很多优化,诸如算子下推、智能连接、分区裁剪等。同时由于这种查询涉及的数据量往往比较大,OceanBase 数据库的查询执行引擎也做了并行处理、任务拆分、动态分区、流水调度、任务裁剪、子任务结果合并、并发限制等等优化技术。这些优化技术使得 OceanBase 数据库很好的支持了 OLAP 场景的复杂查询处理能力。
分布式执行过程可划分为三个阶段:
- 生成 job 树:将分布式计划拆分为多个子计划,每个子计划由一个 job 进行封装,多个 job 间的父子关系继承自相关算子间的父子关系,最终构成 job 树。
- 调度 job:主要确定每个 job 的执行时机。
- 执行 job:主要控制每个 job 的 task 拆分,以及每个 job 的多个 task 的执行顺序,并执行发送 task、接收 task 执行结果、处理执行错误等操作。