GPORCA的限制

GPORCA的限制

在Greenplum数据库中使用默认的GPORCA优化器时有一些限制。GPORCA和传统的查询优化器当前并存于Greenplum数据库中,因为GPORCA不支持所有的Greenplum数据库特性。
这一节描述这些限制。

不支持的SQL查询特性

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

性能衰退

启用GPORCA时,已知下列特性会发生性能衰退:
  • 短查询 - 对于GPORCA,短查询可能会因为GPORCA对于判断最优查询执行计划的增强而遇到额外的负担。
  • ANALYZE - 对于GPORCA,ANALYZE命令为分区表生成根分区的统计信息。对于传统优化器,这些统计信息不会被生成。
  • DML操作 - 对于GPORCA,DML增强包括在分区和分布键上的更新支持,这可能会产生额外的负担。

此外,GPORCA使用这些特性执行SQL语句时,以前版本特性的增强功能可能会导致额外的时间。