ob 优化器和oracle pg优化器有什么不同
ob优化器
优化器是整个 SQL 优化的核心,其作用是为 SQL 请求生成最佳的执行计划。在优化过程中,优化器需要综合考虑 SQL 请求的语义、对象数据特征、对象物理分布等多方面因素,解决访问路径选择、联接顺序选择、联接算法选择、分布式计划生成等多个核心问题,最终选择一个对应该 SQL 的最佳执行计划。SQL 的执行计划是一棵由多个操作符构成的执行树。
为了充分利用OceanBase的分布式架构和多核计算资源的优势,OceanBase的查询优化器会对执行计划做并行优化:根据计划树上各个节点的数据分布,对串行执行计划进行自底向上的分析,把串行的逻辑执行计划改造成一个可以并行执行的逻辑计划。
查询优化器是数据库管理系统的“大脑”,它会枚举传入语句的执行计划,基于代价模型和统计信息对每一个执行计划算出代价,并最终选取一条代价最低的执行计划。OceanBase的查询优化器基于System-R框架,是一个bottom-up的过程,通过选择基表访问路径、连接算法和连接顺序、最后综合一些其他算子来计算代价,从而生成最终的执行计划。
直到这里我们会发现,似乎与普通的单机 RDBMS 区别不大。诚然,作为一个已存在 40 多年的行业,很多理论的工程实践大同小异,但 OceanBase 作为 NewSQL 有独特的魅力。上面的查询优化部分生成的是串行执行计划,为了充分利用 OceanBase 的分布式架构和多核计算资源的优势,OceanBase 的查询优化器随即会进入并行优化阶段:根据计划树上各个节点的数据分布,对串行执行计划进行自底向上的分析,把串行的逻辑执行计划改造成一个可以并行执行的逻辑计划。并行优化最重要的参考信息是数据的分布信息(Location),即查询所需访问的每个分区的各个副本在集群中的存储位置,这一信息由总控服务(主)(Master Root Service)维护,为了提升访问效率该分布信息还有缓存机制。
在分布式数据库里,查询优化器会依据数据的分布信息生成分布式的执行计划。如果查询涉及的数据在多台服务器,需要走分布式计划,这是分布式数据库 SQL 引擎的一个重要特点,也是十分考验查询优化器能力的场景。OceanBase 数据库查询优化器做了很多优化,诸如算子下推、智能连接、分区裁剪等。如果 SQL 语句涉及的数据量很大,OceanBase 数据库的查询执行引擎也做了并行处理、任务拆分、动态分区、流水调度、任务裁剪、子任务结果合并、并发限制等优化技术。
oracle
CBO优化器根据SQL语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,并调用计划生成器(Plan Generator)生成执行计划,比较执行计划的代价,最终选择选择一个代价最小的执行计划。查询优化器由查询转换器(Query Transform)、代价估算器(Estimator)和计划生成器(Plan Generator)组成。