优化器方法配置
这些配置参数提供了影响查询优化器选择查询规划的原始方法。如果优化器为特定的查询选择的缺省规划并不是最优的,可以通过使用这些配置参数强制优化器选择一个不同的规划来临时解决这个问题。更好的方法包括调节优化器开销常量、手动运行ANALYZE、增加配置参数default_statistics_target的值、增加使用ALTER TABLE SET STATISTICS为指定列增加收集的统计信息。
enable_bitmapscan
参数说明:控制优化器对位图扫描规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后会全局禁止bitmap scan算子,可能导致部分场景性能下降。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
force_bitmapand
参数说明:控制优化器对bitmap and规划类型的强制使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:打开该参数后当满足bitmap and索引扫描算子使用条件时,优化器生成计划会强制走bitmap and索引扫描,部分场景下可能影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
enable_hashagg
参数说明:控制优化器对Hash聚集规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后会导致部分场景下Hash聚集算子无法使用,影响查询改写逻辑,使查询性能下降。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
enable_hashjoin
参数说明:控制优化器对Hash连接规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后会全局禁止使用Hash Join算子,优先生成其他Join类型计划,可能导致部分场景性能下降。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
enable_indexscan
参数说明:控制优化器对索引扫描规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后会全局禁止使用索引扫描算子,可能导致部分场景性能下降。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
enable_indexonlyscan
参数说明:控制优化器对仅索引扫描规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后会全局禁止使用仅索引扫描算子,一些仅需要走索引扫描不需要回表的计划将无法生成,可能导致部分场景性能下降。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
enable_gsiscan
参数说明:控制优化器对仅全局二级索引扫描规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:在有全局二级索引的场景下,如果关闭该参数,会导致无法生成仅全局二级索引扫描计划,可能影响查询性能。
enable_gsitablescan
参数说明:控制优化器对全局二级索引回表扫描规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:在有全局二级索引的场景下,如果关闭该参数,会导致无法生成全局二级索引回表扫描计划,可能影响查询性能。
gsi_fastpath_level
- 单个表、没有子查询、没有子链接、目标表不是视图。
- 查询语句无法生成普通索引的执行计划。
- 查询语句无法生成GSI的IndexOnlyScan执行计划。
- 查询语句不包含Scan类的Hint,如TableScan、IndexScan等。
- WHERE条件中包含等值条件且等值条件包含候选GSI(唯一且不是部分GSI索引)的索引键。
参数类型:枚举类型
参数单位:无
取值范围:
- strict:等值条件包含GSI所有索引键。
- partial:等值条件包含GSI的部分索引键(最左匹配),性能不一定最优。
- none:关闭。
默认值:strict
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能影响部分GSI场景下的计划生成,影响查询性能。
gaussdb=# CREATE TABLE t1(a INT, b INT, c INT); gaussdb=# CREATE GLOBAL UNIQUE INDEX t1_gsi ON t1(b,c); -- Q1 gaussdb=# SELECT * FROM t1 WHERE b=1; -- Q2 gaussdb=# SELECT * FROM t1 WHERE b=1 LIMIT 1;
上述场景中,GSI索引建在(b,c)两列上,gsi_fastpath_level参数设置为partial时,查询语句Q1和Q2才可以生成GSI非Stream回表计划。索引唯一性由(b,c)两列保证,对于查询语句Q1,返回结果可能有多条,GSI非Stream回表计划的性能不一定是最优的,对于查询语句Q2,由于包含limit 1的条件,GSI非Stream回表计划的性能依然是最优的。
enable_default_gsi
参数说明:(1)控制在创建表时,对于不包含分布键的列添加主键约束或者唯一约束时是否默认创建全局二级索引;(2)控制hashbucket表是否可以创建全局二级索引。
参数类型:布尔型
参数单位:无
取值范围:
- on:(1)创建表时,对于不包含分布键的列添加主键约束或者唯一约束时默认创建全局二级索引;(2)hashbucket表可以创建全局二级索引。
- off:(1)创建表时,对于不包含分布键的列添加主键约束或者唯一约束时不会默认创建全局二级索引,创建表失败;(2)hashbucket表不可以创建全局二级索引。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。用户需按照实际使用场景决策是否打开此参数。
设置不当的风险与影响:
- 如果此参数为off,(1)创建表时无法对不包含分布键的列添加主键约束或者唯一约束,建议优先通过业务改造添加分布键来解决;(2)无法对hashbucket表创建全局二级索引。
- 如果此参数为on,(1)通过默认创建全局二级索引,表上可以对不包含分布键的列添加主键约束或者唯一约束,需注意表上如果创建了全局二级索引,DML操作会有潜在的性能下降;(2)hashbucket表上的部分索引、表达式索引形式的GSI会在重分布过程中进行离线重建,重建期间会阻塞业务,非部分索引、非表达式索引形式的GSI,在重分布过程中进行在线重建,不会阻塞业务。加节点、重分布的全程GSI保持有效。
enable_gsi_iud_returning
参数说明:控制是否打开对于建有全局二级索引的基表上执行INSERT、UPDATE、DELETE操作时支持RETURNING功能。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示打开。
- off:表示关闭。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:在建有全局二级索引的基表上执行INSERT、UPDATE、DELETE操作的场景下,如果关闭该参数将无法支持RETURNING功能。
enable_gsi_distkey_update
参数说明:控制是否打开全局二级索引分布键更新(UPDATE、UPSERT、MERGE INTO)功能。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示打开。
- off:表示关闭。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果关闭该参数将无法支持全局二级索引分布键更新。
enable_gsi_dml_lp_opt
参数说明:控制优化器是否执行全局二级索引简单DML的规则判断系统,对于简单DML的执行进行优化。全局二级索引的简单DML优化规则如下:
- 针对INSERT语句,仅支持以下形式的简单INSERT:
- 仅支持单条VALUES子句(不支持多条VALUES);
- VALUES中的值仅限于常量或参数(不支持表达式);
- 不支持RETURNING子句、任何形式的子查询以及各类UPSERT语句;
- 目标表必须为单个表,该表上存在不超过一个全局二级索引,且该索引必须为普通全局二级索引(不支持表达式索引或部分索引),同时该索引不能包含自定义类型列。
- 其他DML:目前不支持。
- 该参数需要CN和DN同时设置,保持一致。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示打开。
- off:表示关闭。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果关闭该参数,无法支持GSI DML Light Proxy优化,可能导致部分GSI DML场景性能下降。
enable_material
参数说明:控制优化器对实体化的使用。消除整个实体化是不可能的,但是可以关闭这个参数以防止优化器插入实体节点。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后会禁止优化器插入实体节点,部分场景下无法生成Material算子,可能导致部分场景性能下降。
enable_mergejoin
参数说明:控制优化器对融合连接规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:打开该参数优化器会对满足条件的Join连接生成融合连接路径,可能导致该场景下选择的连接算子非实际最优。
enable_nestloop
参数说明:控制优化器对内表全表扫描嵌套循环连接规划类型的使用。完全消除嵌套循环连接是不可能的,但是,若关闭这个参数,当存在其他方法时,优化器会优先选择其他方法。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:打开该参数优化器会对满足条件的Join连接生成NestloopJoin路径,可能导致该场景下选择的连接算子非实际最优。
enable_index_nestloop
参数说明:控制优化器对内表参数化索引扫描嵌套循环连接规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数会导致部分场景下无法生成参数化路径,通常参数化路径可以提升查询性能,因此一般建议开启。
enable_remote_param
参数说明:控制是否使用XC参数化路径特性,打开后能够生成XC参数化路径计划。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:
- on:新安装的数据库的默认值。
- off:从505.2.0之前版本升级后的默认值。
该参数自505.2.0版本引入,在507.0.0修改默认值,由off改为on。从505.2.0之前版本升级后该参数为off;若升级前存在该参数并且已设置取值,升级后将保留原参数值。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:在相关子链接和Nestloop场景中,若外表规模较小且内表规模较大,同时内表在关联条件上存在符合最左前缀匹配原则的索引时,建议将参数值设置为on。此配置下,若代价模型选择参数化路径,能够提升性能。
设置不当的风险与影响:在相关子链接和Nestloop场景中,若外表规模较大而内表规模较小,将此参数设置为on,且代价模型选择了参数化路径,可能会导致性能下降。
- XC参数化路径生成条件包括:
- 条件中不能包含不可下推表达式。(如PROVOLATILE属性为volatile的函数)。
- 条件能够遵循最左匹配规则匹配索引。
- 外连接的WHERE条件不支持参数化。
- XC参数化支持场景包括:
- 支持生成Nestloop的参数化路径,将Join条件下推到内表RemoteQuery(包括单表RemoteQuery和RemoteJoinQuery)上,以便将外表的查询结果作为参数传递到内表。
- 支持生成Subplan的参数化路径,将Subplan上的Coordinator Qual下推到Subplan的RemoteQuery上,以便将Subplan的父查询的结果作为参数传递到内表。
- 使用XC参数化路径特性存在以下约束:
- 仅支持XC计划,不支持Stream和FQS计划。
- 当且仅当基表生成索引参数化路径时,才对基表生成带参数rescan的计划。
- Nestloop参数化路径仅支持内表为RemoteQuery的场景。
- Nestloop参数化路径不支持将参数下推到子查询上。
- 不支持predpush Hint。
- M-Compatibility模式数据库下,max_datanode_for_plan参数设置大于0时,不支持显示参数化路径DN计划。
- 不支持remote query动态裁剪DN。
enable_remote_pbe_reuse
参数说明:控制XC计划中CN下发DN的PBE报文是否复用。打开后XC计划中CN下发DN的报文会由未命名报文变成带“_disqry_sys_cached”前缀的报文,并在执行过程中进行复用,进而提升查询性能。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示复用。
- off:表示不复用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数会在部分场景下影响XC计划查询性能。
enable_seqscan
参数说明:控制优化器对顺序扫描规划类型的使用。完全消除顺序扫描是不可能的,但是,若关闭这个参数,当存在其他方法时,优化器会优先选择其他方法。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数会导致优化器倾向于选择其他扫描方法,降低顺序扫描方法的优先级,部分场景下可能会影响查询性能。
enable_sort
参数说明:控制优化器对排序方法的使用。完全消除明确的排序是不可能的,但是,若关闭这个参数,当存在其他方法时,优化器会优先选择其他方法。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数会导致优化器倾向于选择其他方法,降低排序方法使用的优先级,产生的不良影响较小,通常建议打开。
enable_tidscan
参数说明:控制优化器对TID扫描规划类型的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数会导致优化器倾向于选择其他方法,降低TID扫描方法使用的优先级,产生的不良影响较小,通常建议打开。
enable_kill_query
参数说明:CASCADE模式删除用户时,会删除此用户拥有的所有对象。此参数标识在删除用户的时候,是否允许取消锁定此用户所属对象的query。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许取消锁定。
- off:表示不允许取消锁定。
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:打开后,用户被删除时,该用户对应query可能会暴露,对系统的一致性和安全性带来不利影响。
enable_stream_concurrent_update
参数说明:控制优化器在并发更新场景下对stream的使用,该参数受限于enable_stream_operator参数。如果出现并发update冲突,有可能会出现报错,可以通过本参数控制。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许优化器对update语句生成stream计划。
- off:表示优化器对update语句仅能生成非stream计划。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数会导致优化器倾向于选择其他方法,对update语句仅能生成非stream计划,产生的不良影响较小,通常建议打开。
enable_stream_operator
参数说明:控制优化器对stream的使用。当enable_stream_operator参数关闭时,会有大量关于计划不能下推的日志记录到日志文件中。如果用户不需要这些日志内容,建议用户在enable_stream_operator参数关闭时,也同时关闭enable_unshipping_log参数。裸机安装时,参数会被设置为off。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
- 独立部署:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数优化器将无法生成Stream计划,可能导致查询性能下降。
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跳出循环。若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。
enforce_a_behavior
参数说明:控制正则表达式的规则匹配模式。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示正则表达式采用A格式的匹配规则。
- off:表示正则表达式采用POSIX格式的匹配规则。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:根据业务场景进行设置。
设置不当的风险与影响:查询语句中正则表达式无法按预期匹配。
enable_vector_engine
参数说明:控制优化器对向量化执行引擎的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致优化器未能针对特定场景生成向量化的查询计划,从而影响查询性能。
enable_broadcast
参数说明:控制优化器在stream代价估算时对broadcast分布方式的使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能会影响stream计划生成的准确性,从而影响查询性能。
enable_change_hjcost
参数说明:控制优化器在Hash Join代价估算路径选择时,是否使用将内表运行时代价排除在Hash Join节点运行时代价外的估算方式。如果使用,则有利于选择条数少,但运行代价大的表做内表。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能会导致Hash Join代价估算有误,从而影响带有Hash Join计划生成的准确性。
best_agg_plan
- 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中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数会影响hashagg的生成方式,通常建议使用默认值,设置其他值会倾向于某一类hashagg,设置不当可能会影响部分场景下查询的性能。
agg_redistribute_enhancement
参数说明:进行Agg操作时,如果包含多个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中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后DFS分区表相关查询性能可能下降。
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中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能会导致优化器不能选择更优的计算Node Group,从而影响查询性能。
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参数决定该索引是否使用去重压缩功能。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示btree索引默认开启索引去重压缩功能。
- off:表示btree索引默认关闭索引去重压缩功能。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,对于非唯一索引、索引键值重复度较高且索引占用空间较大的情况,可以打开。
设置不当的风险与影响:非唯一索引且索引键值重复度很低或者唯一的场景,去重压缩功能会使索引插入性能小幅度劣化。
expr_engine
参数说明:控制表达式的执行方式。
参数类型:枚举类型
参数单位:无
取值范围:
- EXPR_TREE:表示使用表达式的递归引擎。
默认值:EXPR_TREE
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:该参数仅可设置为EXPR_TREE。
设置不当的风险与影响:无。
当前版本暂不支持表达式执行优化,仅能设置为默认值EXPR_TREE。
sql_result_check
参数说明:控制表达式结果自验证功能。
参数类型:枚举类型
参数单位:无
取值范围:
- off:关闭基于表达式的结果校验功能。
- single_select:在支持进行表达式结果校验的类型范围中,对于数值精度类型列校验失败时,则产生告警;其他类型列的校验失败时,则抛出错误异常
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:使用single_check时,会少量增加查询运行的时间开销。
stream_multiple
参数说明:设置优化器计算Stream算子开销时的加权。在原代价模型的基础上,最终Stream代价将被乘以此加权参数。
此参数仅对Redistribute和Broadcast类型的Stream有效。
参数类型:浮点型
参数单位:无
取值范围:0 ~ DBL_MAX
默认值:1
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,并依据部署环境适时调整。
设置不当的风险与影响:设置不当会导致优化器错估Stream算子开销,从而影响查询性能。
qrw_inlist2join_optmode
参数说明:控制是否使用inlist-to-join查询重写。
参数类型:字符串
参数单位:无
取值范围:
- disable:关闭inlist-to-join查询重写。
- cost_base:基于代价的inlist-to-join查询重写,即基于代价自动评估是否使用inlist-to-join查询重写。
- rule_base:基于规则的inlist-to-join查询重写,即强制使用inlist-to-join查询重写。
- 任意正整数(1 ~ 2147483647):inlist-to-join查询重写阈值,即list内元素个数大于该阈值,进行inlist-to-join查询重写。
默认值:cost_base
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,除非有异常场景或者发现优化器选择的计划查询性能低,需要手动调优才使用其他值。
设置不当的风险与影响:该参数会影响优化器是否进行inlist-to-join查询重写,设置不当会导致未生成更优计划。
以下数据类型可以使用inlist-to-join查询重写功能:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、FLOAT4、FLOAT8、BOOLEAN、CHAR、BPCHAR、VARCHAR、NVARCHAR、TEXT、DATE、TIME、TIMEZ、TIMESTAMP、TIMESTAMPTZ、SMALLDATETIME、INTERVAL、TINTERVAL、UNSIGNED TINYINT、UNSIGNED SMALLINT、UNSIGNED INTEGER、UNSIGNED BIGINT。
skew_option
参数说明:控制是否使用优化策略。
参数类型:枚举类型
参数单位:无
取值范围:off、normal、lazy
- off:关闭策略。
- normal:采用激进策略。对于不确定是否出现倾斜的场景,认为存在倾斜,并进行相应优化。
- lazy:采用保守策略。对于不确定是否出现倾斜场景,认为不存在倾斜,不进行优化。
默认值:normal
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:会影响优化器是否针对倾斜进行优化,设置不当会影响计划生成性能或查询执行性能。
default_limit_rows
参数说明:设置生成genericplan的缺省limit估算行数。
参数类型:浮点型
参数单位:无
取值范围:-100 ~ DBL_MAX。建议取值范围为0.1 ~ 10000,超过这个范围可能会导致业务风险。
- 设置为非负数时,表示直接将设置的值作为估算limit的行数。
- 设置为负数时,表示使用百分比的形式设置默认的估算值,负数转换为默认百分比,即-5代表5%。
默认值:-10
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能影响带有limit算子genericplan查询的性能。
check_implicit_conversions
参数说明:控制对查询中有隐式类型转换的索引列是否会生成候选索引路径进行检查。关于该参数的使用场景请参见《SQL调优指南》中“检查隐式转换的性能问题”章节。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示对查询中有隐式类型转换的索引列会生成候选索引路径进行检查。
- off:表示不进行相关检查。
默认值:off
- 将该参数设置为on时,需要同时将参数enable_fast_query_shipping设置为off,检查索引列的隐式数据类型转换的识别机制才会生效。
- 该参数用于检查隐式转换性能问题,在正式生产环境中请关闭该参数。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:不进行检查可能导致查询语句中正则表达式无法按预期匹配。
cost_weight_index
参数说明:设置index_scan的代价权重。
参数类型:浮点型
参数单位:无
取值范围:1e-6 ~ 1e+10
默认值:1
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:会影响优化器是否选择index_scan,设置不当可能影响优化器选择非最优计划从而影响查询性能。
try_vector_engine_strategy
参数说明:设置行存表选择向量化执行引擎的策略。通过设置该参数,可以使包含行存表的查询转换为向量化的执行计划执行计算,从而提升类AP场景的复杂查询的执行性能。
参数类型:枚举类型
参数单位:无
取值范围:
- off:表示关闭本功能,即行存表不会转换为向量的执行计划执行。
- force:表示只要查询中不包含向量化引擎不支持的类型或者表达式,若查询的基表为行存表,强制将查询转换为向量化的执行计划执行计算。在这种情况下,针对不同的查询场景可能出现性能下降。
- optimal:表示在force的基础上,由优化器根据查询的复杂度进行选择是否将查询语句转换为向量化的执行计划,尽可能避免转换为向量化的执行计划后出现性能下降。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:会影响优化器是否选择向量化的执行计划,设置不当可能会影响部分场景下查询的性能。
enable_opfusion_reuse
参数说明:控制复用opfusion obj内存特性的开关。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示在满足条件情况下,复用opfusion obj内存。
- off:表示关闭本功能。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致计划重新生成,查询性能下降。
enable_iud_fusion
参数说明:控制IUD语句优化特性的开关。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示对输入进行类型转换时做优化处理。
- off:表示关闭本功能。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,IUD语句性能需优化时可考虑开启。
设置不当的风险与影响:打开可能会增加优化器的开销,无明显风险。
enable_cached_operator
参数说明:控制算子执行态缓存特性的开关。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许缓存执行算子。
- off:表示关闭本功能。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若关闭则无法对算子执行态进行缓存,从而影响查询性能。
enable_smp_partitionwise
参数说明:控制是否在SMP场景下,开启Partition-wise Join的能力。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示在SMP场景下,开启Partition-wise Join的能力。
- off:表示在SMP场景下,不开启Partition-wise Join的能力。
默认值:
- on:新安装的数据库的默认值。
- off:该参数自505.2.0版本添加,从505.2.0版本之前的数据库升级后此参数为off。升级前若存在该参数并且设置了值,升级后默认值不变。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:可能影响SMP场景下数据查询操作的性能。
force_smp_partitionwise_scan
参数说明:在SMP场景下,打开Partition-wise Join开关enable_smp_partitionwise后,是否在全局范围内开启Partition-wise Scan的并行扫描方式。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示在SMP场景下,开启Partition-wise Scan的并行扫描方式。
- off:表示在SMP场景下,不开启Partition-wise Scan的并行扫描方式。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:可能影响SMP场景下读取分区表数据的性能。
enable_nestagg
参数说明:开启嵌套聚集功能,嵌套聚集为形如sum(min(col))的双重聚集语法。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启嵌套聚集功能。
- off:表示关闭嵌套聚集功能。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:影响嵌套聚集功能的使用。
enable_index_skip_scan
参数说明:控制索引跳跃扫描特性的开关。若关闭该特性,当用户使用组合索引查询且前导列为空时,会退化为全表扫描。若开启该特性,当用户使用组合索引查询且前导列为空时,数据库会根据NDV(Number of Distinct Values,表示某一列的Distinct统计值)比例决定是否走索引跳跃扫描。NDV的比例越低,索引跳跃扫描优势越大,当NDV的比例较高时,索引跳跃扫描的代价可能比全表扫描的代价更大,从而导致数据库还是选择全表扫描。
- 不支持间隔前导列,例如在表t1的(a,b,c,d)列创建索引后,使用“SELECT * FROM t1 WHERE b = xxx AND d = xxx”语句进行查询的情况。
- 不支持前导列为范围的情况。
- 不支持表达式索引。
- 仅支持RCR版本的btree、ubtree索引。
- 仅支持IndexScan和IndexOnlyScan,不支持BitmapIndexScan。
- 由于SQL BYPASS当前停止演进,该特性暂不适配SQL BYPASS。
- 不支持开启SMP。
- 不支持hashbucket表。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启索引跳跃扫描特性。
- off:表示关闭索引跳跃扫描特性。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若关闭索引跳跃扫描特性,当用户使用组合索引查询且前导列为空时,会无法使用索引扫描,从而降低查询效率。
enable_gsi_stream_dml
参数说明:控制具有全局二级索引的基表DML操作是否开启STREAM优化特性。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示对于具有全局二级索引的基表的DML操作,开启STREAM优化,即允许生成STREAM计划。
- off:表示对于具有全局二级索引的基表的DML操作,关闭STREAM优化,即不允许生成STREAM计划。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会带来性能劣化。
enable_partition_statistic
参数说明:控制在优化器阶段,是否使用分区级统计信息。可以使用分区级统计信息的具体场景为:在cplan中,查询涉及到的分区表被静态剪枝到单个分区,包括一级分区表剪枝到单个一级分区。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示可以使用分区级统计信息。
- off:表示不可以使用分区级统计信息。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:影响分区表被静态剪枝到单个分区时的统计信息,进而影响计划的生成。
dist_query_adaptive_mode
参数说明:用于控制分布式自适应计划所选择的模式,其取值范围为auto、plan、sql、off,默认值为auto。当参数值不为off时,会进行Remote Query算子的代价计算。
参数类型:枚举类型
参数单位:无
取值范围:
- auto:分布式计划自适应选择,基于代价或规则选择分布式计划。当规则存在时(设置参数dist_query_adaptive_rows不为0),其优先级高于基于代价的选择。
- plan:强制执行下发计划的分布式计划。
- sql:强制执行下发语句的分布式计划。
- off:关闭分布式计划自适应选择。
默认值:
- auto:新安装的数据库的默认值。
- off:该参数自507.0.0版本引入,从其他版本升级后该参数为off;若升级前存在该参数并且已设置取值,升级后将保留原参数值。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
分布式计划自适应选择流程如下:首先生成下发计划的分布式计划(Stream计划),通过分析该Stream计划的特征判断是否触发自适应选择分布式计划功能,若需启用自适应优化,则重新生成下发语句的分布式计划。
- 基于代价的分布式计划自适应约束:
- 仅SELECT语句支持自适应选择分布式计划。
- 语句中包含Stream的hint时,该计划无法启用自适应分布式优化。
- 当Stream计划中仅包含Stream Gather算子且无其他Stream算子时,该计划无法启用自适应分布式优化。
- 当Stream计划是SMP计划时,该计划无法启用自适应分布式优化。
- 当Stream计划不包含Join操作且无相关子链接时,该计划无法启用自适应分布式优化。
- 当Stream计划代价相对较小时,该计划无法启用自适应分布式优化。
- 当CN节点内存或CPU使用率高于80%时,通过分布式自适应计划生成的下发语句的分布式计划,如果是非参数化路径计划,系统会回退至Stream计划。该约束受参数opt_behavior_knob选项DIST_QUERY_ADAPTIVE_FALLBACK控制,默认开启。
- 基于规则的分布式计划自适应约束:
- 仅SELECT语句支持自适应选择分布式计划。
- 语句中包含Stream的hint时,该计划无法启用自适应分布式优化。
- 当Stream计划中仅包含Stream Gather算子且无其他Stream算子时,该计划无法启用自适应分布式优化。
- 当Stream计划是SMP计划时,该计划无法启用自适应分布式优化。
dist_query_adaptive_rows
参数说明:基于Stream算子行数大小选择分布式计划规则。所有Stream算子(除Stream Gather算子)的总行数小于等于该参数值时,选择下发语句的分布式计划;大于该参数值时,选择下发计划的分布式计划。
参数类型:整型
参数单位:无
取值范围:[0, 2147483647]
默认值:0(表示禁用该规则)。该参数自507.0.0版本引入,从其他版本升级后该参数为0;若升级前存在该参数并且已设置取值,升级后将保留原参数值。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:建议在DN节点数量较多的场景下使用。使用时通过业务数据规模调整,通常建议设置不超过500。
设置不当的风险与影响:该参数会影响优化器对生成计划的选择,部分场景下影响查询性能。若要更改,请谨慎操作,避免因误操作产生意料之外的风险。
Stream算子要和所有DN节点建立连接传输数据,在DN节点数量较多、高并发的业务场景下易引发数据通信瓶颈,因此该参数建议在集群主DN节点数量大于8个且并发量大于100的业务中使用,使用前需要根据业务实际情况测试并调整参数取值。
enable_constraint_optimization
参数说明:控制是否启用基于信息性约束的查询优化功能,该功能开启时,优化器能够利用表上的约束信息生成更高效的查询执行计划。主要场景为:外部数据源扫描优化、冗余非空约束消除、包含唯一性约束的扫描与连接优化。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启基于信息性约束的查询优化功能。
- off:表示关闭基于信息性约束的查询优化功能。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能会影响部分场景下查询的性能。