其他优化器选项

default_statistics_target

参数说明:为没有用ALTER TABLE SET STATISTICS设置字段目标的表设置缺省统计目标。此参数设置为正数是代表统计信息的样本数量,为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,-100~10000。

须知:

  • 比默认值大的正数数值增加了ANALYZE所需的时间,但是可能会改善优化器的估计质量。
  • 调整此参数可能存在性能劣化的风险,如果某个查询劣化,可以考虑
  1. 恢复默认的统计信息。
  2. 使用plan hint来调整到之前的查询计划。(详细参见使用Plan Hint进行调优
  • 当此guc参数设置为负数时,如果计算的采样样本数大于等于总数据量的2%,且用户表的数据量小于1600000时,ANALYZE所需时间相比guc参数为默认值的时间会有所增加。
  • 当此guc参数设置为负数时,则autoanalyze不生效。

默认值:100

constraint_exclusion

参数说明:控制查询优化器使用表约束查询的优化。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:枚举类型

  • on表示检查所有表的约束。

  • off表示不检查约束。

  • partition表示只检查继承的子表和UNION ALL子查询。

    须知:
    当constraint_exclusion为on,优化器用查询条件和表的CHECK约束比较,并且在查询条件和约束冲突的时候忽略对表的扫描。

默认值:partition

说明:
目前, constraint_exclusion缺省被打开,通常用来实现表分区。为所有的表打开它时,对于简单的查询强加了额外的规划,并且对简单查询没有什么好处。如果不用分区表,可以关掉它。

cursor_tuple_fraction

参数说明:优化器估计游标获取行数在总行数中的占比。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:浮点型,0.0~1.0。

须知:
比默认值小的值与使用 “fast start” 为游标规划的值相偏离,从而使得前几行恢复的很快而抓取全部的行需要很长的时间。比默认值大的值加大了总的估计的时间。在最大的值1.0处,像正常的查询一样规划游标,只考虑总的估计时间和传送第一行的时间。

默认值:0.1

from_collapse_limit

参数说明:根据生成的FROM列表的项数来判断优化器是否将把子查询合并到上层查询,如果FROM列表项个数小于等于该参数值,优化器会将子查询合并到上层查询。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,1~INT_MAX。

须知:
比默认值小的数值将降低规划时间,但是可能生成差的执行计划。

默认值:8

join_collapse_limit

参数说明:根据得出的列表项数来判断优化器是否执行把除FULL JOINS之外的JOIN构造重写到FROM列表中。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,1~INT_MAX。

须知:

  • 设置为1会避免任何JOIN重排。这样就使得查询中指定的连接顺序就是实际的连接顺序。查询优化器并不是总能选取最优的连接顺序,高级用户可以选择暂时把这个变量设置为1,然后指定它们需要的连接顺序。
  • 比默认值小的数值减少规划时间但也降低了执行计划的质量。

默认值:8

plan_mode_seed

参数说明:该参数为调测参数,目前仅支持OPTIMIZE_PLAN和RANDOM_PLAN两种。其中:OPTIMIZE_PLAN表示通过动态规划算法进行代价估算的最优plan,参数值设置为0;RANDOM_PLAN表示随机生成的plan;如果设置为-1,表示用户不指定随机数的种子标识符seed值,由优化器随机生成[1, 2147483647]范围整型值的随机数,并根据随机数生成随机的执行计划;如果用户指定guc参数值为[1, 2147483647]范围的整型值,表示指定的生成随机数的种子标识符seed,优化器需要根据seed值生成随机的执行计划。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,-1~ 2147483647

默认值:0

须知:

  • 当该参数设置为随机执行计划模式时,优化器会生成不同的随机执行计划,该执行计划可能不是最优计划。因此在随机计划模式下,会对查询性能产生影响,所以建议在升级、扩容、缩容等正常业务操作或运维过程中将该参数保持为默认值0。
  • 当该参数不为0时,查询指定的plan hint不会生效。

hashagg_table_size

参数说明:用于设置执行HASH JOIN操作时HASH表的大小。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,0~INT_MAX/2。

默认值:0

enable_codegen

**参数说明:**标识是否允许开启代码生成优化,目前代码生成使用的是LLVM优化。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示允许开启代码生成优化。

  • off表示不允许开启代码生成优化。

    须知:
    目前LLVM优化仅支持向量化执行引擎特性和SQL on Hadoop特性,在其他场景下建议关闭此参数。

**默认值:**on

codegen_strategy

**参数说明:**标识在表达式codegen化过程中所使用的代码生成优化策略。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**枚举类型

  • partial表示当所计算表达式中即使包含部分未被codegen化的函数时,仍可借助表达式全codegen框架调用LLVM动态编译优化策略。

  • pure表示当所计算表达式整体可被codegen化时,才考虑调用LLVM动态编译优化策略。

    须知:
    在开启代码生成优化会导致查询性能下降的场景下可以设置此参数为pure,其他场景下建议不改变此参数的默认值partial。

**默认值:**partial

enable_codegen_print

**参数说明:**标识是否允许在log日志中打印所生成的LLVM IR函数。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示允许在log日志中打印IR函数。
  • off表示不允许在log日志中打印IR函数。

**默认值:**off

codegen_cost_threshold

**参数说明:**由于LLVM编译生成最终的可执行机器码需要一定时间,因此只有当实际执行的代价大于编译生成机器码所需要的代码和优化后的执行代价之和时,利用代码生成才有收益。codegen_cost_threshold标识代价的阈值,当执行估算代价大于该代价时,使用LLVM优化。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**整型,0 ~ 2147483647。

**默认值:**10000

enable_bloom_filter

**参数说明: **标识是否允许使用BloomFilter优化。该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示允许使用BloomFilter优化。
  • off表示不允许使用BloomFilter优化。

**默认值:**on

enable_extrapolation_stats

**参数说明: **标识对于日期类型是否允许基于历史统计信息使用推理估算的逻辑。使用该逻辑对于未及时收集统计信息的表可以增大估算准确的可能性,但也存在错误推理导致估算过大的可能性,需要对于日期类型数据定期插入的场景开启此开关。该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示允许基于历史统计信息使用推理估算的逻辑。
  • off表示不允许基于历史统计信息使用推理估算的逻辑。

**默认值:**off

autoanalyze

**参数说明: **标识是否允许在生成计划的时候,对于没有统计信息的表进行统计信息自动收集。对于外表和临时表,不支持autoanalyze,如果需要收集统计信息,用户需手动执行analyze操作。如果在auto analyze某个表的过程中数据库发生异常,当数据库正常运行之后再执行语句有可能仍提示需要收集此表的统计信息。此时需要用户对该表手动执行一次analyze操作,以同步统计信息数据。该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示允许自动进行统计信息收集。
  • off表示不允许自动进行统计信息收集。

**默认值:**off

enable_analyze_check

**参数说明: **标识是否允许在生成计划的时候,对于在pg_class中显示reltuples和relpages均为0的表,检查该表是否曾进行过统计信息收集。

该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示允许检查。
  • off表示不允许检查。

**默认值:**off

enable_sonic_hashagg

**参数说明:**标识是否依据规则约束使用基于面向列的hash表设计的Hash Agg算子。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示在满足约束条件时使用基于面向列的hash表设计的Hash Agg算子。
  • off表示不使用面向列的hash表设计的Hash Agg算子。

说明:

  • 在开启enable_sonic_hashagg,且查询达到约束条件使用基于面向列的hash表设计的Hash Agg算子时,查询对应的Hash Agg算子内存使用通常可获得精简。但对于代码生成技术可获得显著性能提升的场景(enable_codegen打开后获得较大性能提升),对应的算子查询性能可能会出现劣化。
  • 开启enable_sonic_hashagg,且查询达到约束条件使用基于面向列的hash表设计的Hash Agg算子时,在Explain Analyze/Performance的执行计划和执行信息中,算子显示为“Sonic Hash Aggregation”,而未达到该约束条件时,算子名称将显示为“Hash Aggregation”,Explain详解请参见详解

**默认值:**on

enable_sonic_hashjoin

**参数说明:**标识是否依据规则约束使用基于面向列的hash表设计的Hash Join算子。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示在满足约束条件时使用基于面向列的hash表设计的Hash Join算子。
  • off表示不使用面向列的hash表设计的Hash Join算子。

说明:

  • 当前开关仅适用于Inner Join的场景。
  • 在开启enable_sonic_hashjoin,查询对应的Hash Inner算子内存使用通常可获得精简。但对于代码生成技术可获得显著性能提升的场景,对应的算子查询性能可能会出现劣化。
  • 开启enable_sonic_hashjoin,且查询达到约束条件使用基于面向列的hash表设计的Hash Join算子时,在Explain Analyze/Performance的执行计划和执行信息中,算子显示为“Sonic Hash Join”,而未达到该约束条件时,算子名称将显示为“Hash Join”,Explain详解请参见详解

**默认值:**on

enable_sonic_optspill

**参数说明:**标识是否对面向列的hash表设计的Hash Join算子进行下盘文件数优化。该参数打开时,在Hash Join算子下盘文件较多的时候,下盘文件数不会显著增加。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

**取值范围:**布尔型

  • on表示优化面向列的hash表设计的Hash Join算子的下盘文件数。
  • off表示不优化面向列的hash表设计的Hash Join算子的下盘文件数。

**默认值:**on

log_parser_stats

参数说明:控制优化器输出parser模块的性能日志。

该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

  • on表示使用。
  • off表示不使用。

默认值:off

log_planner_stats

参数说明:控制优化器输出planner模块的性能日志。

该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

  • on表示使用。
  • off表示不使用。

默认值:off

log_executor_stats

参数说明:控制优化器输出executor模块的性能日志。

该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

  • on表示使用。
  • off表示不使用。

默认值:off

log_statement_stats

参数说明:控制优化器输出该语句的性能日志。

该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

  • on表示使用。
  • off表示不使用。

默认值:off

plan_cache_mode

参数说明:标识在prepare语句中,选择生成执行计划的策略。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:枚举类型

  • auto表示按照默认的方式选择custom plan或者generic plan。
  • force_generic_plan表示强制走generic plan。
  • force_custom_plan表示强制走custom plan。

说明:

  • 此参数只对prepare语句生效,一般用在prepare语句中参数化字段存在比较严重的数据倾斜的场景下。
  • custom plan是指对于preapre语句,在执行execute的时候,把execute语句中的参数嵌套到语句之后生成的计划。custom plan会根据execute语句中具体的参数生成计划,这种方案的优点是每次都按照具体的参数生成优选计划,执行性能比较好;缺点是每次执行前都需要重新生成计划,存在大量的重复的优化器开销。
  • generic plan是指对于preapre语句生成计划,该计划策略会在执行execute语句的时候把参数bind到plan中,然后执行计划。这种方案的优点是每次执行可以省去重复的优化器开销;缺点是当bind参数字段上数据存在倾斜时该计划可能不是最优的,部分bind参数场景下执行性能较差。

默认值:auto

enable_hypo_index

参数说明:控制优化器执行EXPLAIN命令时是否考虑虚拟索引。

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

  • on表示使用。
  • off表示不使用。

默认值:off

意见反馈
编组 3备份
openGauss 2024-03-19 00:44:58
取消