判断被使用的查询优化器

当GPORCA被启用(默认启用)时,可以判断Greenplum数据库是在使用GPORCA还是退回到传统查询优化器。

可以检查查询的EXPLAIN查询计划来判断Greenplum数据库使用哪一种查询优化器来执行该查询:

  • 当GPORCA生成该查询计划时,设置optimizer=on和GPORCA的版本会被显示在查询计划的末尾。例如:

    1. Settings: optimizer=on
    2. Optimizer status: PQO version 1.584

    当Greenplum数据库退回到使用传统优化器生成该计划时,设置optimizer=on和legacy query optimizer会被显示在查询计划的末尾。例如:

    1. Settings: optimizer=on
    2. Optimizer status: legacy query optimizer

    当服务器配置参数OPTIMIZER是off时,下面这些行会被显示在查询计划的末尾。

    1. Settings: optimizer=off
    2. Optimizer status: legacy query optimizer
  • 下面这些计划项只出现在GPORCA生成的EXPLAIN计划输出中。传统优化器查询计划中不支持这些项。

    • Assert operator
    • Sequence operator
    • DynamicIndexScan
    • DynamicTableScan
    • Table Scan
  • 当一个针对分区表的查询由GPORCA生成时,EXPLAIN计划只显示正在被消除的分区数。被扫描的分区不会被显示出来。由传统优化器生成的EXPLAIN计划会列出被扫描的分区。

日志文件包含的消息会指示使用了哪一种查询优化器。如果Greenplum数据库退回到传统优化器,一个带有NOTICE信息的消息会被增加到日志文件来表示不支持的特性。还有,当Greenplum数据库退回到传统优化器时,在该查询的执行日志消息中,标签Planner produced plan:会出现在该查询之前。

注意: 可以通过设置Greenplum数据库的服务器配置参数client_min_messages为LOG来配置Greenplum数据库在psql命令行中显示日志消息。有关该参数的信息请见Greenplum数据库参考指南。

上级主题: 关于GPORCA

例子

这个例子展示了GPORCA启用时针对分区表运行的查询的区别。

下面这个CREATE TABLE语句创建一个有单层分区的表:

  1. CREATE TABLE sales (trans_id int, date date,
  2. amount decimal(9,2), region text)
  3. DISTRIBUTED BY (trans_id)
  4. PARTITION BY RANGE (date)
  5. (START (date '2016­01­01')
  6. INCLUSIVE END (date '2017­01­01')
  7. EXCLUSIVE EVERY (INTERVAL '1 month'),
  8. DEFAULT PARTITION outlying_dates

GPORCA支持下面这个针对该表的查询并且不会在日志文件中生成错误:

  1. select * from sales ;

EXPLAIN计划输出只列出选中的分区数。

  1. -> Partition Selector for sales (dynamic scan id: 1) (cost=10.00..100.00 rows=50 width=4)
  2. Partitions selected: 13 (out of 13)

如果GPORCA不支持一个针对分区表的查询,Greenplum数据库会退回到传统优化器。传统优化器生成的EXPLAIN计划会列出选中的分区。下面这个例子展示了解释计划的一部分,它列出了一些选中的分区。

  1. -> Append (cost=0.00..0.00 rows=26 width=53)
  2. -> Seq Scan on sales2_1_prt_7_2_prt_usa sales2 (cost=0.00..0.00 rows=1 width=53)
  3. -> Seq Scan on sales2_1_prt_7_2_prt_asia sales2 (cost=0.00..0.00 rows=1 width=53)
  4. ...

这个例子展示了Greenplum数据库从GPORCA退回到传统查询优化器时的日志输出。

当这个查询被运行时,Greenplum数据库会退回到传统查询优化器。

  1. explain select * from pg_class;

一个消息会被增加到日志文件。该消息包含下面这个NOTICE信息,它指出了GPORCA没有执行该查询的原因:

  1. NOTICE,""Feature not supported by the Pivotal Query Optimizer: Queries on master-only tables"