更新时间:2024-08-20 GMT+08:00

优化器方法配置

这些配置参数提供了影响查询优化器选择查询规划的原始方法。如果优化器为特定的查询选择的缺省规划并不是最优的,可以通过使用这些配置参数强制优化器选择一个不同的规划来临时解决这个问题。更好的方法包括调节优化器开销常量、手动运行ANALYZE、增加配置参数default_statistics_target的值、增加使用ALTER TABLE SET STATISTICS为指定列增加收集的统计信息。

enable_bitmapscan

参数说明:控制优化器对位图扫描规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:关闭后会全局禁止bitmap scan算子,可能导致部分场景性能下降。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。

force_bitmapand

参数说明:控制优化器对bitmapand规划类型的强制使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:off

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

设置建议:

enable_hashagg

参数说明:控制优化器对哈希聚集规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_hashjoin

参数说明:控制优化器对哈希连接规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_indexscan

参数说明:控制优化器对索引扫描规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_gsitablescan

参数说明:控制优化器对全局二级索引表扫描规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:设置为默认值。

enable_indexonlyscan

参数说明:控制优化器对仅索引扫描规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_gsiscan

参数说明:控制优化器对仅全局二级索引扫描规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_material

参数说明:控制优化器对实体化的使用。消除整个实体化是不可能的,但是可以关闭这个变量以防止优化器插入实体节点。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_mergejoin

参数说明:控制优化器对融合连接规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:off

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

设置建议:推荐使用默认值。

enable_nestloop

参数说明:控制优化器对内表全表扫描嵌套循环连接规划类型的使用。完全消除嵌套循环连接是不可能的,但是关闭这个变量就会让优化器在存在其他方法的时候优先选择其他方法。

参数类型:布尔型

参数单位:

取值范围

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

默认值:off

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

设置建议:推荐使用默认值。

enable_index_nestloop

参数说明:控制优化器对内表参数化索引扫描嵌套循环连接规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_seqscan

参数说明:控制优化器对顺序扫描规划类型的使用。完全消除顺序扫描是不可能的,但是关闭这个变量会让优化器在存在其他方法的时候优先选择其他方法。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:推荐使用默认值。

设置不当的风险与影响:

enable_sort

参数说明:控制优化器使用的排序步骤。完全消除明确的排序是不可能的,但是关闭这个变量可以让优化器在存在其他方法的时候优先选择其他方法。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_tidscan

参数说明:控制优化器对TID扫描规划类型的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_kill_query

参数说明:CASCADE模式删除用户时,会删除此用户拥有的所有对象。此参数标识在删除用户的时候,是否允许取消锁定此用户所属对象的查询。

参数类型:布尔型

参数单位:

取值范围

  • on:表示允许取消锁定。
  • off:表示不允许取消锁定。

默认值:off

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

设置建议:

enable_stream_concurrent_update

参数说明:控制优化器在并发更新场景下对stream的使用,该参数受限于enable_stream_operator参数。如果出现并发update冲突,有一定可能会出现报错,可以通过本参数控制。

参数类型:布尔型

参数单位:

取值范围

  • on:表示允许优化器对update语句生成stream计划。
  • off:表示优化器对update语句仅能生成非stream计划。

默认值:on

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

设置建议:

enable_stream_operator

参数说明:控制优化器对stream的使用。当enable_stream_operator参数关闭时,会有大量关于计划不能下推的日志记录到日志文件中。如果用户不需要这些日志内容,建议用户在enable_stream_operator参数关闭时,也同时关闭enable_unshipping_log参数。

参数类型:布尔型

参数单位:

取值范围

  • on:表示使用。
  • off:表示不使用。
默认值
  • 独立部署:off

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

设置建议:推荐使用默认值。

enable_stream_recursive

参数说明:控制是否将with-recursive关联查询下推DN分布式执行。

参数类型:布尔型

参数单位:

取值范围

  • on:表示支持使用with-recursive关联查询下推DN分布式执行。
  • off:表示不支持使用with_recursive下推。

默认值:on

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

设置建议:

max_recursive_times

参数说明:控制with recursive的最大迭代次数。

参数类型:整型

参数单位:

取值范围:0~2147483647

默认值:200

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

设置建议:对于with recursive语句,此参数用于避免陷入死循环,层次查询可用nocycle跳出循环。若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。

enable_broadcast

参数说明:控制优化器在stream代价估算时对broadcast分布方式的使用。

参数类型:布尔型

参数单位:

取值范围

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

默认值:on

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

设置建议:

enable_change_hjcost

参数说明:控制优化器在Hash Join代价估算路径选择时,是否使用将内表运行时代价排除在Hash Join节点运行时代价外的估算方式。如果使用,则有利于选择条数少,但运行代价大的表做内表。

参数类型:布尔型

参数单位:

取值范围

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

默认值:off

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

设置建议:

best_agg_plan

参数说明:本参数用于控制优化器生成hashagg计划的类型。对于stream下的Agg操作,优化器会生成三种计划:
  • hashagg+gather(redistribute)+hashagg。
  • redistribute+hashagg(+gather)。
  • hashagg+redistribute+hashagg(+gather)。

参数类型:整型

参数单位:

取值范围:0 ~ 3

  • 0:优化器会根据以上三种计划的估算cost选择最优的一种计划生成。
  • 1:强制生成第一种计划。
  • 2:如果group by列可以重分布,强制生成第二种计划,否则生成第一种计划。
  • 3:如果group by列可以重分布,强制生成第三种计划,否则生成第一种计划。

默认值:0

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

设置建议:

agg_redistribute_enhancement

参数说明:进行聚集操作时,如果包含多个group by列且均不为分布列,进行重分布时会选择某一group by列进行重分布。本参数控制选择重分布列的策略。

参数类型:布尔型

参数单位:

取值范围

  • on:表示会选择估算distinct值最多的一个可重分布列作为重分布列。
  • off:表示会选择第一个可重分布列作为重分布列。

默认值:off

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

设置建议:

enable_absolute_tablespace

参数说明:控制表空间是否可以使用绝对路径。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示可以使用绝对路径。
  • off:表示不可以使用绝对路径。

默认值:on

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

设置建议:

enable_valuepartition_pruning

参数说明:是否对DFS分区表进行静态/动态优化。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示对DFS分区表进行静态/动态优化。
  • off:表示不对DFS分区表进行静态/动态优化。

默认值:on

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

设置建议:

expected_computing_nodegroup

参数说明:标识选定的计算Node Group模式或目标计算Node Group。Node Group目前为内部机制,用户无需设置。共四种计算Node Group模式,用于关联操作和聚集操作时选定计算Node Group。在每一种模式中,优化器有针对性地选定几个候选计算Node Group,然后根据代价,从中为当前算子挑选最佳计算Node Group。

参数类型:字符串

参数单位:

取值范围

  • optimal:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前用户具有COMPUTE权限的所有Node Group包含的所有DN构成的Node Group。
  • query:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前查询涉及的所有基表所在Node Group包含的所有DN构成的Node Group。
  • Node Group名(enable_nodegroup_debug被设置为off):候选计算Node Group列表包含算子操作对象所在的Node Group和该指定的Node Group。
  • Node Group名(enable_nodegroup_debug被设置为on):候选计算Node Group为指定的Node Group。

默认值:query

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

设置建议:

enable_nodegroup_debug

参数说明:控制优化器在多Node Group环境下,是否使用强制弹性计算。Node Group目前为内部机制,用户无需设置。该参数只在expected_computing_nodegroup被设置为具体Node Group时生效。

参数类型:布尔型

参数单位:

取值范围

  • on:表示强制将计算弹性到expected_computing_nodegroup所指定的Node Group进行计算。
  • off:表示不强制使用某个Node Group进行计算。

默认值:off

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

设置建议:

enable_default_index_deduplication

参数说明:设置btree索引默认情况下是否对键值重复的元组进行去重压缩。去重压缩功能对主键索引和唯一索引不生效。在重复键值的索引较多时,去重压缩功能可以有效降低索引占用空间。非唯一索引且索引键值重复度很低或者唯一的场景,去重压缩功能会使索引插入性能小幅度劣化。若创建索引时带有with (deduplication=on/off)语法时,优先根据deduplication参数决定该索引是否使用去重压缩功能。

参数类型:布尔型

参数单位:

取值范围

  • off:表示btree索引默认关闭索引去重压缩功能。
  • on:表示btree索引默认开启索引去重压缩功能。

默认值:off

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

设置建议:

enable_expr_fusion

参数说明:控制SRF、表达式展平、取消集中式Seq Scan投影、共享聚合函数的转移状态和Step步数优化特性的开关。

参数类型:布尔型

参数单位:

取值范围

  • on:表示同时启用SRF、表达式展平、取消集中式Seq Scan投影、共享聚合函数的转移状态和Step步数优化特性。
  • off:表示关闭本功能。

默认值:off

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

设置建议:

SRF只支持query_dop=1的场景。

stream_multiple

参数说明:设置优化器计算Stream算子开销时的加权。在原代价模型的基础上,最终Stream代价将被乘以此加权参数。

此参数仅对Redistribute和Broadcast类型的Stream有效。

参数类型:浮点型

参数单位:

取值范围:0~DBL_MAX

默认值:1

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

设置建议:

qrw_inlist2join_optmode

参数说明:控制是否使用inlist-to-join查询重写。

参数类型:字符串

参数单位:

取值范围

  • disable:关闭inlist2join查询重写。
  • cost_base:基于代价的inlist2join查询重写。
  • rule_base:基于规则的inlist2join查询重写,即强制使用inlist2join查询重写。
  • 任意正整数(1~2147483647):inlist2join查询重写阈值,即list内元素个数大于该阈值,进行inlist2join查询重写。

默认值:cost_base

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

设置建议:推荐使用默认值。

skew_option

参数说明:控制是否使用优化策略。

参数类型:枚举类型

参数单位:

取值范围:off、normal、lazy

  • off:关闭策略。
  • normal:采用激进策略。对于不确定是否出现倾斜的场景,认为存在倾斜,并进行相应优化。
  • lazy:采用保守策略。对于不确定是否出现倾斜场景,认为不存在倾斜,不进行优化。

默认值:normal

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

设置建议:

enable_dngather

参数说明:控制是否把满足阈值的Stream计划收敛到单个DN进行计算,减少计划中的Stream节点个数。

参数类型:布尔型

参数单位:

取值范围

  • on:表示打开。
  • off:表示关闭。

默认值:off

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

设置建议:

dngather_min_rows

参数说明:控制dngather的行数阈值,小于等于此值可以被收敛到单DN计算,前提必须打开enable_dngather。

参数类型:浮点型

参数单位:

取值范围:-1 ~ DBL_MAX

默认值:500.0

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

设置建议:

cost_weight_index

参数说明:设置index_scan的代价权重。

参数类型:浮点型

参数单位:

取值范围:1e-10 ~ 1e+10

默认值:1

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

设置建议:

default_limit_rows

参数说明:设置生成genericplan的缺省limit估算行数。此参数设置为非负数时表示直接将设置的值作为估算limit的行数,设置为负数时表示使用百分比的形式设置默认的估算值,负数转换为默认百分比,即-5代表5%。

参数类型:浮点型

参数单位:

取值范围:-100 ~ DBL_MAX

默认值:-10

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

设置建议:

enforce_a_behavior

参数说明:控制正则表达式的规则匹配模式。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示正则表达式采用A格式的匹配规则。
  • off:表示正则表达式采用POSIX格式的匹配规则。

默认值:on

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

设置建议:

check_implicit_conversions

参数说明:控制对查询中有隐式类型转换的索引列是否会生成候选索引路径进行检查。关于该参数的使用场景请参见《开发指南》中“SQL调优指南 > 检查隐式转换的性能问题”章节。

参数类型:布尔型

参数单位:

取值范围

  • on:表示对查询中有隐式类型转换的索引列会生成候选索引路径进行检查。
  • off:表示不进行相关检查。

默认值:off

将该参数设置为on时,需要同时将参数enable_fast_query_shipping设置为off,检查索引列的隐式数据类型转换的识别机制才会生效。

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

设置建议:

enable_opfusion_reuse

参数说明:控制复用opfusion obj内存特性的开关。

参数类型:布尔型

参数单位:

取值范围

  • on:表示在满足条件情况下,复用opfusion obj内存。
  • off:表示关闭本功能。

默认值:on

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

设置建议:

enable_iud_fusion

参数说明:控制IUD语句优化特性的开关。

参数类型:布尔型

参数单位:

取值范围

  • on:表示对输入进行类型转换时做优化处理。
  • off:表示关闭本功能。

默认值:off

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

设置建议: