更新时间:2024-09-02 GMT+08:00

优化器方法配置

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

enable_bitmapscan

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_hashagg

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_mixedagg

参数说明:控制优化器对Mixed Agg聚集规划类型的使用。(该参数仅8.2.0及以上集群版本支持)

参数类型:USERSET

取值范围:布尔型

  • on表示使用,为符合条件的Grouping Sets语句(包括Rollup或Cube)生成Mixed Agg查询计划。
  • off表示不使用。

默认值:off

通常在大数量场景(单个DN表的数据量在100GB以上),采用Mixed Agg查询计划可以提升语句的执行性能。

不支持Mixed Agg的场景如下:

  • GROUP BY子句里列的数据类型不支持哈希操作。
  • 聚集函数中包含DISTINCT去重或ORDER BY排序。
  • 使用GROUPING SETS子句时不包含空的分组。

enable_hashjoin

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_indexscan

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_indexonlyscan

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_material

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_mergejoin

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

参数类型:USERSET

取值范围:布尔型

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

默认值:off

enable_nestloop

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

参数类型:USERSET

取值范围:布尔型

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

默认值:off

enable_index_nestloop

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

参数类型:USERSET

取值范围:布尔型

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

默认值:新安装集群的场景下是on,如果集群是从R8C10版本升级上来的,则保持前向兼容。如果是从R7C10或者更早的版本升级上来,则默认值是off。

left_join_estimation_enhancement

参数说明:控制left join的行数估计值是否采用优化后的值。该参数仅8.3.0.100及以上集群版本支持。

参数类型:USERSET

取值范围:布尔型

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

默认值:off

enable_seqscan

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_sort

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

max_opt_sort_rows

参数说明:控制order by子句中最大优化的limit+offset行数。该参数仅8.3.0及以上集群版本支持。

参数类型:USERSET

取值范围:整型,0~INT_MAX

  • 取值为0时:表示参数不生效。
  • 取值为其他值时:表示order by子句中limit+offset行数小于该值时,优化生效,大于该值时,优化不生效。优化后耗时减小,但内存消耗可能增大。

默认值:0

enable_tidscan

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_kill_query

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

参数类型:SUSET

取值范围:布尔型

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

默认值:off

enforce_oracle_behavior

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_stream_concurrent_update

参数说明:控制优化器在并发更新场景下对stream的使用,该参数受限于enable_stream_operator参数。

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_stream_ctescan

参数说明:控制stream计划是否支持ctescan。

参数类型:USERSET

取值范围:布尔型

  • on表示stream计划下支持ctescan。
  • off表示stream计划下不支持ctescan。

默认值:off

enable_stream_operator

参数说明:控制优化器对stream的使用。

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_stream_recursive

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_value_redistribute

参数说明:控制是否开启生成value redistribute优化计划,8.2.0及以上集群版本中,该参数针对不带Partition by子句的rank、dense_rank、row_number是否生成value redistribute优化计划生效。

参数类型:USERSET

取值范围:布尔型

  • on表示支持使用value redistribute生成优化计划。
  • off表示不支持使用value redistribute生成优化计划。

默认值:on

max_recursive_times

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

参数类型:USERSET

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

默认值:200

enable_vector_engine

参数说明:控制优化器对向量化执行引擎的使用。

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_broadcast

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_redistribute

参数说明:控制优化器对stream代价估算时对local redistribute和split redistribute分布方式的使用。该参数仅8.2.1.300及以上集群版本支持。

参数类型:USERSET

取值范围:布尔型

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

默认值:on

enable_change_hjcost

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

参数类型:USERSET

取值范围:布尔型

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

默认值:off

enable_fstream

参数说明:控制优化器下发语句时对stream的使用,该参数只限定于HDFS外表使用。

该参数现在已经废弃。为了保留前向兼容,可以设置成功,但是实际不起任何作用。

参数类型:USERSET

取值范围:布尔型

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

默认值:off

enable_hashfilter

参数说明:控制是否允许对包含复制表(包括dual表和常量表)的计划生成hashfilter。该参数仅8.2.0及以上集群版本支持。

参数类型:USERSET

取值范围:布尔型

  • on表示允许生成hashfilter。
  • off表示任何情况下都不允许生成hashfilter。

默认值:on

best_agg_plan

参数说明:对于stream下的Agg操作,优化器会生成三种计划:
  1. hashagg+gather(redistribute)+hashagg。
  2. redistribute+hashagg(+gather)。
  3. hashagg+redistribute+hashagg(+gather)。

本参数用于控制优化器生成哪种hashagg的计划。

参数类型:USERSET

取值范围:0,1,2,3

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

默认值:0

turbo_engine_version

参数说明:对于建表指定turbo存储格式表(表属性中enable_turbo_store参数设置为on),且当查询不涉及merge join或sort agg算子时,执行器可走turbo执行引擎,执行器部分性能可获得成倍性能提升。

参数类型:USERSET

取值范围:0,1,2,3

  • 取值为0时,表示turbo执行引擎关闭。
  • 取值为1时,表示仅针对单表agg查询场景使用turbo执行引擎。
  • 取值为2时,表示仅针对单表agg或多表join关联查询场景使用turbo执行引擎。
  • 取值为3时,对于大多常用算子可使用turbo执行引擎加速,不支持算子如merge join,sort agg等算子。数据量较大且turbo_engine_version取值为3时,merge join,sort agg算子出现的情况较少,因此基本可以实现任意SQL语句的turbo执行引擎加速。

默认值:0

跨VW场景暂不建议打开turbo执行引擎。

enable_turbo_zero_padding

参数说明:控制turbo引擎打开是否对单列numeric小数点进行补零对齐。

参数类型:SIGHUP

取值范围:布尔型

  • on表示进行补零对齐,性能更好。
  • off表示不进行补零对齐,兼容原列存执行引擎行为。

默认值:on

spill_compression

参数说明:控制执行器算子运行数据由于内存不足下盘时的压缩算法。该参数仅9.1.0.100及以上集群版本支持。

参数类型:USERSET

取值范围:枚举型

  • 'lz4',表示使用lz4压缩算法,对于下盘量较小场景性能更优,但占用更多存储空间。
  • 'zstd',表示使用zstd压缩算法,对于下盘量较大场景,IO为主要瓶颈,其性能更优,且存储空间约为lz4的2/3。

默认值:'lz4'

index_selectivity_cost

参数说明:控制列存表索引扫描时cbtree的cost计算(选择率>0.001),该参数仅8.2.1.100及以上集群版本支持。

参数类型:USERSET

取值范围:浮点型,-1,0~1000,负数仅支持设置-1,且不允许设置其他负数。

  • 取值为0时,不受索引选择率阈值0.001的影响。
  • 取值为-1时,受disable_cost影响。
  • 为其他值时,为cbtree cost计算的系数。

默认值:-1

index_cost_limit

参数说明:控制列存表索引扫描时cbtree的cost计算不生效阈值,该参数仅8.2.1.100及以上集群版本支持。

参数类型:USERSET

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

  • 取值为0时,表示参数不生效。
  • 取值为其他值时,表行数少于该值时不受索引选择率阈值0.001的影响。

默认值:0

volatile_shipping_version

参数说明:控制volatile函数下推执行的范围。

参数类型:USERSET

取值范围:0,1,2,3

  • 取值为3时,在2的基础上,扩展支持InlineCTE在只被引用一次时支持下推,扩展支持复制表UPSERT中使用包含volatile函数时的下推。
  • 取值为2时,在1的基础上,扩展支持在复制CTE结果的目标列中包含volatile函数时的下推。
  • 取值为1时,扩展支持nextval、uuid_generate_v1、sys_guid、uuid函数出现在语句目标列时的完全下推。
  • 取值为0时,支持random类函数的完全下推,nextval、uuid_generate_v1函数仅在INSERT含有简单查询语句的部分下推。

默认值:3

agg_redistribute_enhancement

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

参数类型:USERSET

取值范围:布尔型

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

默认值:off

enable_valuepartition_pruning

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

参数类型:USERSET

取值范围:布尔型

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

默认值:on

expected_computing_nodegroup

参数说明:标识选定的计算Node Group模式或目标计算Node Group。Node Group目前为内部用机制,用户无需设置。

共4种计算Node Group模式,用于关联操作和聚集操作时选定计算Node Group。在每一种模式中,优化器有针对性地选定几个候选计算Node Group,然后根据代价,从中为当前算子挑选更合适的计算Node Group。

参数类型:USERSET

取值范围:字符串

  • optimal:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前用户具有COMPUTE权限的所有Node Group包含的所有DN构成的Node Group。
  • query:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前查询涉及的所有基表所在Node Group包含的所有DN构成的Node Group。
  • bind:当前session用户是逻辑集群用户时,候选计算Node Group为当前用户关联的逻辑集群的Node Group;当session用户不是逻辑集群用户时,候选计算Node Group选取规则和参数设置为query时的规则一致。
  • Node Group名:

默认值:bind

enable_nodegroup_debug

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

该参数只在expected_computing_nodegroup被设置为具体Node Group时生效。

参数类型:USERSET

取值范围:布尔型

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

默认值:off

stream_multiple

参数说明:设置优化器计算Stream算子的开销时的加权。

在原代价模型的基础上,最终Stream代价将被乘以此加权参数。

参数类型:USERSET

取值范围:浮点型,0~10000。

默认值:1

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

qrw_inlist2join_optmode

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

参数类型:USERSET

取值范围:字符串

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

默认值:disable

enable_inlist_hashing

参数说明:控制是否使用inlist哈希优化。该参数仅9.1.0及以上集群版本支持。

参数类型:USERSET

取值范围:布尔型

  • on表示开启inlist哈希优化。
  • off表示关闭inlist哈希优化。

默认值:on

setop_optmode

参数说明:控制不带ALL选项的集合操作(UNION/EXCEPT/INTERSECT)语句的各个查询分支语句是否执行去重操作。该参数仅8.2.0及以上集群版本支持。

参数类型:USERSET

取值范围:枚举型

  • disable:查询分支不执行去重操作。
  • force:强制查询分支执行去重操作。
  • cost:优化器在查询分支去重和不去重这两种执行方式中,选择代价比较小的执行方式。

默认值:disable

此参数配置仅在SQL语句的执行计划满足以下条件时生效:

  • SQL语句中的UNION/EXCEPT/INTERSECT操作不带ALL选项。
  • 执行集合操作的各个查询分支在进行集合操作前执行过数据重分布动作。

skew_option

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

参数类型:USERSET

取值范围:字符串

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

默认值:normal

enable_expr_skew_optimization

参数说明:控制是否在倾斜优化策略中使用表达式统计信息。该参数仅9.1.0.100及以上集群版本支持。

参数类型:USERSET

取值范围:布尔型

  • on表示在倾斜优化策略中使用表达式统计信息来判断是否存在倾斜。
  • off表示在倾斜优化策略中不使用表达式统计信息来判断是否存在倾斜。

默认值:on

prefer_hashjoin_path

参数说明:控制是否优先生成hashjoin路径,以便通过将代价较大的其它路径预剪枝掉的方法来提升整体计划生成时间。该参数仅8.2.1及以上集群版本支持。

参数类型:USERSET

取值范围:布尔型

  • on表示启用hashjoin路径提前生成的优化。
  • off表示关闭hashjoin路径提前生成的优化。

默认值:on

enable_hashfilter_test

参数说明:该参数用于控制是否为基表扫描增加分布列的hashfilter,以便确认结果是否符合预期。同时,在数据插入时,控制是否进行DN准确性校验(即校验当前数据是否应该插入当前DN)。

参数类型:USERSET

取值范围:布尔型

  • on表示为基表扫描添加分布列的hashfilter,并在数据插入时进行DN准确性校验。
  • off表示不为基表扫描添加分布列的hashfilter,并在数据插入时不进行DN准确性校验。

默认值:on

  • 此参数仅对hash分布的表有效。
  • 当该参数设置为on后,因在数据插入时会进行DN准确性校验,会影响数据插入性能。