使用GPORCA时的考虑

使用GPORCA时的考虑

用GPORCA最优化执行查询需要考虑的查询条件。
确保满足下列条件:
  • 表不含有多列分区键。
  • 多级分区表示一个统一多级分区表。请见关于统一多级分区表
  • 在针对只存在于Master的表(例如系统表pg_attribute)运行时,服务器配置参数optimizer_enable_master_only_queries被设置为on。有关该参数的信息,请见Greenplum数据库参考指南
    注意: 启用这一参数会降低短期目录查询的性能。为了避免这一问题,只对会话或者查询设置这一参数。
  • 已经在分区表的根分区上收集统计信息。

如果分区表包含超过20,000个分区,考虑重新设计该表的模式。

这些服务器配置参数影响GPORCA查询处理。

  • optimizer_cte_inlining_bound控制对公共表表达式(CTE)查询(含有WHERE子句的查询)执行的内联量。
  • optimizer_force_multistage_agg强制GPORCA为标量区分限制聚集选择一种3阶段聚集计划。
  • optimizer_force_three_stage_scalar_dqa强制GPORCA在生成了带有多阶段聚集的计划时选择它。
  • optimizer_join_order_threshold指定GPORCA在连接子女数量达到多少时使用基于动态规划的连接排序算法。
  • optimizer_nestloop_factor控制查询优化时应用到嵌套循环连接的代价因子。
  • optimizer_parallel_union控制对于含有UNION或者UNION ALL子句的查询发生的并行量。当该值为on时,GPORCA可以生成一个查询计划,其中UNION或者UNION ALL操作的子操作在Segment实例上并行执行。
  • optimizer_sort_factor控制GPORCA在查询优化时应用于排序操作的代价因子。当出现数据倾斜时可以为查询调整代价因子。

这些服务器配置参数控制信息的显示和记录。

  • optimizer_print_missing_stats控制有关对查询缺失统计信息的列的信息显示(默认是true
  • optimizer_print_optimization_stats控制GPORCA查询优化度量对于查询的记录(默认为off

有关这些参数的信息请见Greenplum数据库参考指南

GPORCA生成minidump来描述一个给定查询的优化上下文。该文件中的信息不太容易被用于调试或者排错。minidump文件位于Master的数据目录中并且使用下面的命名格式:

Minidump_date_time.mdp

有关minidump文件的信息,请见Greenplum数据库参考指南中的服务器配置参数optimizer_minidump

EXPLAIN ANALYZE命令使用GPORCA时,EXPLAIN计划只显示被消除的分区数。被扫描的分区不被显示。要在Segment日志中显示被扫描分区的名字,可设置服务器配置参数gp_log_dynamic_partition_pruningon。下面这个SET命令的例子启用该参数。

SET gp_log_dynamic_partition_pruning = on;