GPORCA改变的行为

GPORCA改变的行为

相比使用传统规划器,启用了GPORCA优化器(默认启用)的Greenplum数据库的行为有些改变。
  • 允许在分布键上的UPDATE操作。
  • 允许在分区键上的UPDATE操作。
  • 支持对统一分区表的查询。
  • 对更改为使用外部表作为叶子分区的分区表的查询将回退到Postgres查询优化器。
  • 不支持直接在分区表的分区(子表)上的DML操作,INSERT除外。

    对于INSERT命令,可以指定分区表的一个叶子子表来把数据插入到分区表中。 如果该数据对于指定的叶子子表不合法,则会返回一个错误。不支持指定一个不是叶子的子表。

  • 如果命令CREATE TABLE AS中没有指定DISTRIBUTED BY子句且没有指定主键或者唯一键,它将会随机分布表数据。
  • 不允许不确定的更新。下面的UPDATE命令会返回一个错误。
    update r set b =  r.b  + 1 from s where  r.a  in (select a from s);
  • 分区表的根表上需要统计信息。ANALYZE命令会在根表和个别分区表(叶子子表)上生成统计信息。详见ANALYZE命令的ROOTPARTITION子句。
  • 查询计划中的附加Result节点:
    • 查询计划的Assert操作符。
    • 查询计划的Partition selector操作符。
    • 查询计划的Split操作符。
  • 在运行EXPLAIN时,GPORCA生成的查询计划与传统查询优化器生成的计划不同。
  • 当启用了GPORCA且Greenplum数据库回退到传统查询优化器生成查询计划时,Greenplum数据库会增加日志文件消息Planner produced plan
  • 当一个或者更多个表列的统计信息缺失时,Greenplum数据库会发出一个警告。 在用GPORCA执行SQL命令时,如果该命令的性能可以通过在它引用的列或者列组上收集统计信息而提升,Greenplum数据库会发出警告。 该警告在命令行上发出并且信息会被加入到Greenplum数据库的日志文件。有关在表列上收集统计信息的内容,请见Greenplum数据库参考指南中的ANALYZE命令。