ORCA 优化器

ORCA 是 YMatrix 中的全新模块化查询优化器,代替了传统的 Planner 优化器,在 OLAP 部分查询场景性能上有了明显的进步。在 YMatrix 中 ORCA 优化器是默认关闭的想使用 ORCA 需要开启参数 optimizer。启用 ORCA 后,YMatrix 数据库会尽可能使用 ORCA 为查询生成执行计划。如果无法使用 ORCA,则仍使用 Postgres 查询优化器。

ORCA 优化器架构

ORCA 的系统边界如下图所示,最下方为 ORCA 优化器,上方为数据库系统。 ORCA 接受数据库系统输入的查询语句( Query )和元数据( MataData,MD),并输出物理执行计划(Plan)。Query/MD/Plan 均为 DLX 格式。 图片 ORCA 内部结构如下图,分为 Job 执行、Job 编排、Memo、OS 等部分 图片

  • Memo:
    • Memo 保存所有可能的计划
    • 每个 Memo Group 保存所有的等效 Expression
    • 物理计划也是直接使用 Memo,且代价是计算物理计划的代价
  • Search: 代表 3 类 Job
    • exploration:逻辑上扩充 Memo,搜索可能的逻辑计划
    • implementation:将逻辑计划转换为物理计划
    • optimization:根据需求的输出参数,增加 Enforcer Expression,计算代价
  • Job Scheduler:规划并执行 Job
  • Transformations:Memo 的转换规则,有两大类:
    • 逻辑计划 > 逻辑计划: 用于 exploration job
    • 逻辑计划 > 物理计划: 用于 implementation job
  • Property Enforcement:数据参数增强
    • 对每个算子的输出参数,进行描述
    • 算子输出不满足要求的,增加 Enforcer,额外处理数据。
  • Metadata Cache:元数据缓存
  • OS:底层库,处理IO、异常、内存、并发等

启用和禁用 ORCA

optimizer = on 时,YMatrix 数据库使用 ORCA 来替代传统查询规划器。服务器配置参数可以启用或者禁用 ORCA。 您可以使用 optimizer 参数在系统、数据库、会话或查询级别配置 ORCA 使用情况。 如果要更改默认行为,请参阅以下部分之一:

启用 ORCA

为 YMatrix 系统设置服务器配置参数 optimizer。

  1. 作为 mxadmin(YMatrix 数据库管理员)登入到 YMatrix 数据库的 Master 主机。
  2. 设置服务器配置参数的值。下面这些 YMatrix 数据库 gpconfig 工具命令把这些参数的值设置为 on
    gpconfig -c optimizer -v on 
  3. 重启 YMatrix 数据库。使用 YMatrix 数据库 mxstop 工具命令重新载入 Master 和 Segment 的 postgresql.conf 文件而不关闭 YMatrix 数据库。
    mxstop -u

    为一个 DATABASE 启用 ORCA

    ALTER DATABASE 命令为单个 YMatrix 数据库设置服务器配置参数 optimizer。例如,为数据库 test_db 启用 ORCA。

    ALTER DATABASE test_db SET OPTIMIZER = ON ;

    为一个会话或者查询启用 ORCA

    可以使用 SET 命令为一个会话设置 optimizer 服务器配置参数。例如,在使用 psql 工具连接到 YMatrix 数据库之后,使用 SET 命令启用 ORCA:

    set optimizer = on ;

    要为特定查询设置参数,请在运行查询之前包含 SET 命令。

注意!
可点击 ORCA 优化器配置参数 查看更多配置参数使用方法。

如何判断是否使用 ORCA 优化器

当 ORCA 被启用(默认关闭)时,可以判断 YMatrix 数据库是在使用 ORCA 还是退回到传统查询优化器。可以检查查询的 EXPLAIN 查询计划来判断 YMatrix 数据库使用哪一种查询优化器来执行该查询:

  • 当 ORCA 生成该查询计划时,配置 optimizer = on 和 ORCA 的版本会被显示在查询计划的末尾。例如:
    Optimizer: ORCA
  • 当数据库配置参数 OPTIMIZER 是 off 或者设置 optimizer = on数据库退回到使用传统优化器生成该计划时。例如:
    Optimizer: Postgres-based planner

注意!
如果 YMatrix 数据库回退到传统查询优化器,优化器服务器配置参数将影响查询计划的生成。关于传统查询优化器的服务器参数,查看运算符控制参数

不支持的 SQL 查询特性

下列是 ORCA 被启用时,不支持的 SQL 查询特性:

  • 索引表达式(在基于表的一个或者更多列的表达式上定义的索引)
  • GIN 索引方法。ORCA只支持B树、位图和 Gist 索引。ORCA忽略使用不支持的方法创建的索引。
  • 外部参数
  • 以下类型的分区表:
    • 非统一分区表。
    • 被修改为用一个外部表作为叶子子分区的分区表。
  • SortMergeJoin (SMJ).
  • 有序聚集
  • 分析扩展:
    • CUBE
    • 多分组集
  • 标量操作符:
    • ROW
    • ROWCOMPARE
    • FIELDSELECT
  • 将集合运算符作为输入参数的聚合函数。
  • percentile_* 窗口函数(YMatrix 数据库不支持有序集聚合函数)。
  • 逆分布函数
  • 执行用 ON MASTER 或 ON ALL SEGMENTS 属性定义的函数的查询。
  • 在元数据名称(如表名)中包含 Unicode 字符的查询,以及字符与主机系统区域设置不兼容。
  • 表名由关键字 ONLY 指定的 SELECT,UPDATE 和 DELETE 命令。
  • 按照排序规则。只有当查询中的所有列都使用时,ORCA 才支持排序规则相同的排序规则。如果查询中的列使用不同的排序规则,YMatrix 则使用传统查询计划器。