其他优化器选项
cost_model_version
参数说明:此参数用来指定优化器代价模型的版本。可以视作一个保护参数,用来禁用最新的优化器代价模型,保持和指定值所对应的版本计划一致,如果和其他GUC控制相同功能,具体生效优先级参见对应GUC参数说明。
参数类型:整型
参数单位:无
取值范围:0、1、2、3、4、5、6、7、8
- 0:表示使用最新的cost估算模型。当前版本等价于8。
- 1:表示使用原始的cost估算模型。
- 2:表示在1的基础上,使用增强的coalesce表达式估算、hash join代价估算、semi/anti join代价估算。
- 3:表示在2的基础上,使用边界矫正估计器估算NDV,indexscan的hint可以作用于indexonlyscan。
- 4:表示在3的基础上,使用分区级统计信息参与代价估算。
- 5:表示在4的基础上,增强outer join计算Filter的代价估算,使得基于代价的查询重写更加准确;增强计算选择率时对outer join外表的filter条件的计算优化,可用enable_poisson_outer_optimization参数单独控制。
- 6:表示在5的基础上,增加了以下功能:
- 当使用子查询更新多列时,多个subplan可优化至仅一个,此功能也可通过enable_shared_set_update单独开关。
- 支持查询重写阶段消除IN非相关子链接中冗余的DISTINCT、GROUP BY条件,消除Exists简单子链接中冗余的LIMIT条件,消除有AGG的表达式相关子链接中冗余的LIMIT条件以及消除子查询中冗余的投影列等优化场景。
- 支持子链接满足内外表分布列关联条件时生成FQS计划。
- 支持视图INSERT,UPDATE,DELETE语句生成FQS计划,并且能根据对分布列的简单过滤条件裁剪涉及的DN节点(对于SELECT视图语句,在6之前已支持FQS计划,但不可裁剪DN节点,6之后也支持裁剪DN节点)。
- 支持查询重写阶段消除sublink中冗余的Left Join/Right Join、消除主键或非空唯一键上的自连接以及将主外键上的外连接转换为内连接等优化场景。
- 支持查询重写阶段对满足条件的简单IN/ANY相关子链接,在能转Semi Join的场景下,由Semi Join切换为Inner Join连接。
- 支持使用静态统计信息,可以直接从PG_CLASS系统表中读取行数和页面数,跳过对基表采样环节。此功能也可通过opt_use_static_stats单独开关。
- 支持查询重写阶段IN相关子链接提升场景,本参数生效时,该功能通过GUC参数rewrite_rule的'pullup_in_related'值单独开关。
- 支持对OR条件基于代价展开,改写成UNION ALL或UNION等集合操作,本参数生效时,该功能通过GUC参数costbased_rewrite_rule的'enable_or_expand'枚举值单独开关。
- 对record array in(多列复合类型表达式是否存在于给定数组集合中)条件生成bitmap index scan计划时,因谓词个数过多,可能导致生成的执行计划在全局上并非最优。开启参数后,可优化该类场景,会倾向于保留覆盖更多列的索引。
- 7:表示在6的基础上,增加了以下功能:
- 支持对于左右操作数均为普通列的等值连接谓词,在路径生成阶段可使用选择率缓存功能加速计算过程,提升优化器性能,该功能也可通过enable_sel_cache单独进行控制。
- 支持对于左右操作数均为普通列或左右操作数为普通列与常量值的=、<>、>、>=、<以及<=等操作符连接的谓词(仅在WHERE后且不包含子查询提升以及join下推的谓词),根据推导规则进行谓词推导消减,简化谓词逻辑并提升查询性能。该功能可以通过opt_behavior_knob的PREDICATE_INFER_ENHANCE选项单独控制开关。
- 支持M-Compatibility模式数据库下,count(DISTINCT 多列)生成并行执行计划,提升查询性能。
- 支持冗余ORDER BY的消除增强,提升查询性能。
- 支持ORA兼容模式下,复制表START WITH CONNECT BY递归查询FQS下推DN执行。
- 支持在查询改写阶段使用基于DSL的规则引擎,提升查询性能。引擎默认包含四个场景的查询重写规则,规则详见《开发指南》中“特性使用指导 > 基于DSL的规则引擎 > DSL规则引擎整体流程”章节的“内置规则介绍”表,对应场景一至场景四相关内容。
- 8:表示在7的基础上,增加了以下功能:
- 支持部分场景(xmlagg不包含ORDER BY子句、xmlagg包含ORDER BY子句且同层查询存在GROUP BY语句以及xmlagg位于相关子查询内部等场景)将聚集函数xmlagg下推到DN节点执行,提升查询性能。
- 支持在507.0.0版本新增DSL查询改写规则,提升查询性能。新增规则详见《开发指南》中“特性使用指导 > 基于DSL的规则引擎 > DSL规则引擎整体流程”章节的“内置规则介绍”表,对应场景五至场景九相关内容。
- 支持Partition Wise Join支持更多场景,优化查询性能。新增能力详见《开发指南》中“特性使用指导 > 分区表 > 分区表查询优化 > Partition-wise Join”。
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:数据库升级时,建议和升级前版本保持一致;新安装环境时,建议设置为默认值。
设置不当的风险与影响:改变此参数,可能会导致很多SQL计划的改变,因此修改前请谨慎评估。
enable_fast_query_shipping
参数说明:控制查询优化器是否使用分布式框架。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示执行计划在CN和DN上各自生成。
- off:表示使用分布式框架,即执行计划在CN上生成,然后发送到DN中执行。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若关闭该参数,可能导致生成的计划不能更高效地利用分布式集群性能,建议打开该参数。
enable_trigger_shipping
参数说明:控制触发器场景是否允许将触发器下推到DN执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许将触发器下推到DN执行。
- off:表示不允许将触发器下推到DN执行,在CN执行。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若关闭该参数,会将性能负载集中在CN节点,不能最大化利用集群性能,建议打开该参数。
enable_remotejoin
参数说明:控制是否允许将连接操作计划下推到DN执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许将连接操作计划下推到DN执行。
- off:表示不允许将连接操作计划下推到DN执行。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果参与JOIN的表数据量很大,这些数据已经根据JOIN条件分散在不同的数据节点上,并且数据节点具备足够的计算资源,可以在本地高效地完成JOIN操作,那么关闭该参数将可能会带来查询性能的下降。
enable_remotegroup
参数说明:控制是否允许将group by与aggregates执行计划下推到DN执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许将group by与aggregates执行计划下推到DN执行。
- off:表示不允许将group by与aggregates执行计划下推到DN执行。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果查询涉及到大量数据的分组,并且数据分布在多个数据节点上,关闭该参数可能会带来查询性能的下降。
enable_remotelimit
参数说明:控制是否允许将LIMIT子句执行计划下推到DN执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许将LIMIT子句执行计划下推到DN执行。
- off:表示不允许将LIMIT子句执行计划下推到DN执行。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果查询涉及到对大数据量的快速裁剪,并且数据分布在多个节点上,关闭此参数可能会降低查询性能。
enable_remotesort
参数说明:控制是否允许将ORDER BY子句操作计划下推到DN执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许将ORDER BY子句操作计划下推到DN执行。
- off:表示不允许将ORDER BY子句操作计划下推到DN执行。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果查询涉及到大量数据的排序,并且数据分布在多个数据节点上,关闭该参数可能会带来性能的下降。
enable_rep_table_strict_shipping
参数说明:进行复制表DML操作时,控制在复制表的下推充要条件判断失败时的行为。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示进行复制表DML操作时,如果对复制表的下推充要条件判断失败,则禁止下推。
- off:表示进行复制表DML操作时,如果对复制表的下推充要条件判断失败,不禁止下推,仅在日志中打印提示信息。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_csqual_pushdown
参数说明:设置进行查询时,是否要将过滤条件下推,进行Rough Check。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示进行查询时,将过滤条件下推,进行Rough Check。
- off:表示进行查询时,不将过滤条件下推,进行Rough Check。
默认值:on
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如果查询涉及大量数据的过滤,并且这些数据分布在不同的节点上,关闭过滤条件下推可能会带来性能的下降。
explain_dna_file
参数说明:当explain_perf_mode为run时,指定导出的目标文件。
参数类型:字符串
参数单位:无
取值范围:绝对路径加上.csv格式的文件名。
默认值:“”
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如有需要根据业务场景进行设置。
设置不当的风险与影响:可能会带来文件写入的开销。
explain_perf_mode
参数说明:此参数用来指定explain的显示格式。
参数类型:枚举类型
参数单位:无
取值范围:normal、pretty、summary、run
- normal:代表使用默认的打印格式。
- pretty:代表使用GaussDB改进后的新显示格式。新的格式层次清晰,计划包含了plan node id,性能分析简单直接。
- summary:是在pretty的基础上增加了对打印信息的分析。
- run:在summary的基础上,将统计的信息输出到csv格式的文件中,以便于进一步分析。
默认值:pretty
pretty模式当前只支持包含stream算子的计划,不支持下发语句到DN节点的计划。因此显示格式会受enable_stream_operator参数影响,当enable_stream_operator设置为off时无法生成包含stream算子的计划。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如有需要可另行设置。
设置不当的风险与影响:不同格式会影响explain提供的信息量。
analysis_options
参数说明:通过开启对应选项使用相应的定位功能,包括数据校验,性能统计等,具体参见取值范围中的描述。
参数类型:字符串
参数单位:无
取值范围:
该参数每次设置将会通过集合操作的方式对当前值做修改:
gaussdb=# show analysis_options;
analysis_options
------------------------------------------------------------
ALL,on(),off(LLVM_COMPILE,HASH_CONFLICT,STREAM_DATA_CHECK)
(1 row)
gaussdb=# SET analysis_options = 'on(LLVM_COMPILE)';
SET
gaussdb=# show analysis_options;
analysis_options
-----------------------------------------------------------
ALL,on(LLVM_COMPILE),off(HASH_CONFLICT,STREAM_DATA_CHECK)
(1 row)
gaussdb=# SET analysis_options = 'on(HASH_CONFLICT)';
SET
gaussdb=# show analysis_options;
analysis_options
-----------------------------------------------------------
ALL,on(LLVM_COMPILE,HASH_CONFLICT),off(STREAM_DATA_CHECK)
(1 row)
gaussdb=# SET analysis_options = 'off(ALL)';
SET
gaussdb=# show analysis_options;
analysis_options
------------------------------------------------------------
ALL,on(),off(LLVM_COMPILE,HASH_CONFLICT,STREAM_DATA_CHECK)
(1 row) - LLVM_COMPILE:表示在explain performance显示界面中显示每个线程的codegen编译时间。
- HASH_CONFLICT:表示在DN进程的gs_log目录的log日志中显示hash表的统计信息,包括hash表大小、hash链长、hash冲突情况。
- STREAM_DATA_CHECK:表示对网络传输前后的数据进行CRC校验。
默认值:off(ALL),表示不开启任何定位功能。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:如需手动设置,需要明确预期显示的结果是否符合需求。
cost_param
- 当cost_param & 1不为0,表示对于求不等值连接选择率时选择一种改良机制,此方法在自连接(两个相同的表之间连接)的估算中更加准确。当前版本已弃用cost_param & 1不为0时的路径,默认选择更优的估算公式。
- 当cost_param & 2不为0,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确。
- 当cost_param & 4不为0,表示在进行stream节点估算时,选用调试模型,该模型不推荐用户使用。
参数类型:整型
参数单位:无
取值范围:0 ~ 2147483647
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:在明确需要调整选择率的场景后,设置对应参数值。
设置不当的风险与影响:设置不当可能会导致最终的代价估算不符合预期,建议在充分测试后确认应当设置的参数值。
enable_partitionwise
参数说明:分区表连接操作是否选择智能算法。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示选择智能算法。
- off:表示不选择智能算法。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:打开前确认是否开启SMP,否则可能影响非SMP场景下分区表Join操作的性能。
partition_page_estimation
参数说明:分区表页面是否通过剪枝结果进行页面估算优化。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用剪枝结果进行页面估算优化。
- off:表示不使用剪枝结果进行页面估算优化。
默认值:
- on:新安装的数据库的默认值。
- off:从506.0.0之前版本升级到当前版本,此参数默认值为off;升级前若存在该参数,无论如何设置,升级后默认值均为off。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_partition_pseudo_predicate
参数说明:在指定分区查询场景下,是否使用伪谓词改写的方式计算指定分区查询的选择率。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用伪谓词改写。
- off:表示不使用伪谓词改写。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
partition_iterator_elimination
参数说明:分区表在分区剪枝结果为一个分区时,是否消除分区迭代算子来提升执行效率。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示消除分区迭代算子。
- off:表示不消除分区迭代算子。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数可能会导致查询性能下降。
rewrite_rule
参数说明:标识开启的可选查询重写规则。有部分查询重写规则是可选的,开启它们并不能总是对查询效率有提升效果。在特定的客户场景中,通过此GUC参数对查询重写规则进行设置,使得查询效率最优。
此参数可以控制查询重写规则的组合。比如有多个重写规则:rule1、rule2、rule3、rule4,可以设置:
set rewrite_rule=rule1; --启用查询重写规则rule1 set rewrite_rule=rule2,rule3; --启用查询重写规则rule2和rule3 set rewrite_rule=none; --关闭所有可选查询重写规则
参数类型:枚举类型
参数单位:无
取值范围:
- none:不使用任何可选查询重写规则。
- lazyagg:使用Lazy Agg查询重写规则(消除子查询中的聚集运算)。
- magicset:使用Magic Set查询重写规则(将带有聚集算子的子查询提前和主查询进行关联,减少子链接的重复扫描)。
- partialpush:使用Partial Push查询重写规则(对于不可下推的语句,下推部分子查询到DN执行,剩余不下推的部分在CN执行)。
- uniquecheck:使用Unique Check查询重写规则(提升目标列中无agg的子查询语句,在执行时检查返回行数是否为1行)。
- disablerep:使用Disable Replicate查询重写规则(由于复制表提升之后可能劣化,开启此规则之后,禁止复制表的子查询提升)。
- intargetlist:使用In Target List查询重写规则(提升目标列中的子查询)。
- predpushnormal:使用Predicate Push查询重写规则(下推谓词条件到子查询中,可能会添加BROADCAST算子来支持分布式执行),当开启predpush后不会生成向量化计划。
- predpushforce:使用Predicate Push查询重写规则(下推谓词条件到子查询中,尽可能地利用索引加速),当开启predpush后不会生成向量化计划。
- predpush:在predpushnormal和predpushforce中根据代价选择最优计划,当开启predpush后不会生成向量化计划。
- disable_pullup_expr_sublink:禁止优化器将expr_sublink类型的子链接提升,关于sublink的分类和提升原理详见《SQL调优指南》中“典型SQL调优点 > 子查询调优”章节。
- enable_sublink_pullup_enhanced:使用增强后的sublink查询重写规则,包括where、having子句的非相关子链接提升和winmagic重写优化。
- disable_pullup_not_in_sublink:禁止优化器对not in相关的子链接进行提升,关于sublink的分类和提升原理详见《SQL调优指南》中“典型SQL调优点 > 子查询调优”章节。
- disable_rownum_pushdown:禁止将父查询中的rownum过滤条件下推到子查询中。
- disable_windowagg_pushdown:禁止将父查询中的窗口函数的过滤条件下推到子查询中。
- cse_rewrite_opt:使用公共表达式CSE,将Having子查询中的公共表达式替换成windowAgg。
- groupby_pushdown_subquery:将Group By子句与聚集函数下推到子查询中。
- enable_sublink_pullup_rownum:允许SQL语句中有ROWNUM伪列的情况下优化器进行子链接提升。
- disable_in_sublink_reduce_distinct:禁止消除IN/ANY非相关子链接提升场景下冗余的DISTINCT和GROUP BY条件。
- disable_sublink_reduce_limit:禁止消除满足约束条件的子链接中冗余的LIMIT条件,如:简单的Exists子链接中不影响查询结果的LIMIT条件等。
- pullup_in_related:允许对满足条件的简单IN/ANY或NOT IN相关子链接提升为Semi Join或Anti Join连接。
- disable_reduce_unused_targetlist: 禁止消除子查询投影列中冗余的函数计算处理。
- disable_sublink_outer_join_elimination: 禁止对满足条件的sublink中冗余的left/right join进行消除。
- disable_fk_pk_outer_join_to_inner_join: 禁止主外键上的外连接转换为内连接。
- disable_self_join_elimination: 禁止消除主键或非空唯一键上的自连接。
- enable_corr_any_sublink_semijoin_to_innerjoin:允许在查询重写阶段对满足条件的简单IN/ANY相关子链接,在能转Semi Join的场景下,由Semi Join切换为Inner Join连接。
- disable_reduce_orderby:禁止消除满足条件的冗余ORDER BY语句。
- enable_not_in_sublink_reduce_distinct:允许消除NOT IN非相关子链接提升场景下冗余的DISTINCT和GROUP BY条件。
默认值:magicset,groupby_pushdown_subquery,pullup_in_related。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。如有其他改写必要,建议明确查询改写场景后,仅打开对应重写规则。
设置不当的风险与影响:可能会导致某些场景改写的语句代价并非最优,建议充分测试后使用对应规则。
- 当cost_model_version>=6或为0且GUC参数中未设置disable_in_sublink_reduce_distinct时,IN非相关子链接消除冗余DISTINCT和GROUP BY的相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中未设置disable_sublink_reduce_limit时,Exists子链接消除冗余LIMIT的相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中未设置disable_reduce_unused_targetlist时,子查询消除冗余投影列的相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中设置pullup_in_related时,IN相关子链接提升相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中未设置disable_sublink_outer_join_elimination时,sublink中冗余的left/right join消除相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中未设置disable_fk_pk_outer_join_to_inner_join时,主外键上的外连接转内连接相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中未设置disable_self_join_elimination时,主键或非空唯一键上的自连接消除相关功能生效。
- 当cost_model_version>=6或为0且GUC参数中设置enable_corr_any_sublink_semijoin_to_innerjoin时,简单IN/ANY相关子链接由Semi Join切换为Inner Join连接生效。
- 当cost_model_version>=6或为0且GUC参数中设置enable_not_in_sublink_reduce_distinct时,NOT IN非相关子链接消除冗余DISTINCT和GROUP BY的相关功能生效。
costbased_rewrite_rule
参数说明:该参数用于标识对指定的查询改写规则开启基于代价的评估策略。部分查询改写规则支持基于代价评估是否对SQL进行改写,从而使内核生成更好的查询计划,提升SQL执行效率。
该参数与GUC参数rewrite_rule互斥,如果同时设置了costbased_rewrite_rule和rewrite_rule,则rewrite_rule的相关规则配置不生效。
该参数可以控制多个基于代价的查询重写规则进行组合设置,且参数间无互斥关系。比如有多个重写规则:rule1、rule2、rule3、rule4,可以设置:
set costbased_rewrite_rule=rule1; --启用查询重写规则rule1基于代价的评估策略 set costbased_rewrite_rule=rule2,rule3; --启用查询重写规则rule2和rule3基于代价的评估策略 set costbased_rewrite_rule=none; --关闭所有可选查询重写规则基于代价的评估策略
参数类型:字符串
参数单位:无
取值范围:
- none:不使用任何基于代价的查询改写策略。
- pullup_subquery:简单子查询展开改写规则开启使用基于代价的查询改写策略。
- pullup_sublink_any_exists:单个或AND条件里的ANY非相关子链接和[NOT] EXISTS相关子链接改写规则开启使用基于代价的查询改写策略。
- pullup_not_in_sublink:单个或AND条件里的NOT IN非相关子链接改写规则开启使用基于代价的查询改写策略。该选项与GUC参数rewrite_rule的disable_pullup_not_in_sublink选项互斥,当开启该选项时,rewrite_rule的disable_pullup_not_in_sublink选项功能不生效。
- pullup_expr_sublink:表达式子链接以及OR条件中的ANY非相关子链接和[NOT] EXISTS相关子链接改写场景生效。该选项与GUC参数rewrite_rule的disable_pullup_expr_sublink、enable_sublink_pullup_enhanced、magicset选项互斥,当开启该选项时rewrite_rule的相关选项功能不生效。
- intargetlist:TargetList中的相关表达式子链接改写规则开启使用基于代价的查询改写策略。该选项与GUC参数rewrite_rule的intargetlist、magicset选项互斥,当开启该选项时,rewrite_rule的intargetlist、magicset选项功能不生效。
- enable_sublink_pullup_enhanced:表达式子链接改写功能增强场景使用基于代价的查询改写策略。该选项受pullup_expr_sublink选项影响,AND条件中的表达式子链接改写场景需开启pullup_expr_sublink选项,该选项功能才生效。且与GUC参数rewrite_rule的enable_sublink_pullup_enhanced选项互斥,当开启该选项时,rewrite_rule的enable_sublink_pullup_enhanced选项功能不生效。
- enable_or_expand:对OR条件基于代价展开,改写成UNION ALL或 UNION等集合操作。
默认值:
- 新安装的数据库默认值:"intargetlist,pullup_expr_sublink,pullup_not_in_sublink,enable_sublink_pullup_enhanced,enable_or_expand"。
- 从历史版本升级到当前版本时的默认值:该参数自505.2.0版本添加,505.2.0版本之前的数据库升级到当前版本后此参数为none。自505.2.0版本升级到其他更高版本(如505.2.1),该GUC默认值与升级前保持一致。
- 相关参数使用场景案例请参见《SQL调优指南》中“实际调优案例 > 案例:调整基于代价的查询重写GUC参数costbased_rewrite_rule”章节。
- 当cost_model_version>=6或为0且GUC参数中设置enable_or_expand时,OR条件基于代价展开相关功能生效。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
对于简单子查询展开(受pullup_subquery参数控制)、ANY非相关子链接和[NOT] EXISTS相关子链接(受pullup_sublink_any_exists参数控制)通常按默认规则进行改写生成执行计划更优,因为开启代价改写策略会带来一些性能开销,因此对于此类规则不建议开启基于代价的改写策略。
在优化器查询重写阶段,开启该参数后相比基于规则的改写模型会生成更多候选计划,因此会引入额外的时间性能消耗;该模式下每走一次基于代价的改写策略相比基于规则的改写策略会增加约1倍的计划生成时间,但可能带来更好的执行性能,因此如果SQL使用基于规则改写策略生成的执行计划已经很好,则建议关闭该参数。
设置不当的风险与影响:关闭该参数相关改写规则将退化为基于规则进行改写,缺少代价评估可能导致部分场景下生成的计划较差,影响查询性能。
costbased_rewrite_rule_max_iterations
参数说明:执行的SQL在计划生成阶段时,如果对同一规则中满足做代价评估的条件数超过该参数的取值,则对本次请求中超过阈值的条件关闭基于代价的评估策略,转化为基于规则的改写策略。当查询改写阶段开启基于代价的评估策略后该参数生效。
参数类型:整型
参数单位:无
取值范围:0 ~ 1000
默认值:10
- 该参数受GUC参数costbased_rewrite_rule影响,当costbased_rewrite_rule值不为none时,该参数生效。
- 如果设置该参数值为0,表示对当前SQL关闭基于代价的改写策略。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大或过小时都可能带来额外的性能开销,影响最终的查询性能。
costbased_rewrite_rule_timeout
参数说明:执行的SQL在计划生成阶段时,如果使用各规则做代价评估的整体时间超过该参数设置的超时时间,则对本次请求后续流程关闭基于代价的评估策略,转化为基于规则的改写策略。当查询改写阶段开启基于代价的评估策略后该参数生效。
参数类型:整型
参数单位:ms(毫秒)
取值范围:-1 ~ 300000
默认值:-1
- 该参数受GUC参数costbased_rewrite_rule影响,当costbased_rewrite_rule值不为none时,该参数生效。
- 如果设置该参数值为0,表示对当前SQL关闭基于代价的改写策略。
- 如果设置该参数值为-1,表示对当前SQL关闭超时时间控制。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大或过小时都可能带来额外的性能开销,影响最终的查询性能。
optrbo_max_or_expr_numbers
参数说明:用于设置OR展开允许应用的最大次数。
参数类型:整型
参数单位:无
取值范围:2 ~ 100
默认值:10
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大时,可能会对OR条件较多的查询进行尝试改写,影响最终的查询性能。
enable_pbe_optimization
参数说明:设置优化器是否对以PBE(Parse Bind Execute)形式执行的语句进行查询计划的优化,优化原理是使FQS选择gplan计划。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示优化器将优化PBE语句的查询计划,在FQS下选择gplan。
- off:表示不使用优化。
默认值:on
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,在不希望FQS选择gplan时可设置为off。
设置不当的风险与影响:关闭可能会导致某些场景走cplan。
enable_light_proxy
参数说明:设置优化器是否对CN上简单查询的执行进行优化,应用端和内核端字符集不匹配时,该参数不生效,建议建库时将字符集设为UTF8。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示优化器将优化CN上简单查询的执行。
- off:表示不使用优化。
默认值:on
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后可能会导致简单查询执行压力集中在CN上。
该参数在存储过程内部通过SET方式设置不生效。
enable_global_plancache
参数说明:设置是否对PBE查询和存储过程中语句的执行计划进行缓存共享,开启该功能可以节省高并发下CN和DN上的内存使用。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示对PBE查询和存储过程中语句的执行计划进行缓存共享。
- off:表示不共享。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。该参数在CN和DN上必须保持一致。
设置不当的风险与影响:CN和DN上该参数设置不一致会使得CN下发给DN的报文不匹配,从而导致报错等问题。开启该参数后,频繁DDL可能导致计划失效,影响CPU开销,进而影响性能。
enable_plancache_mprotect
参数说明:用于控制执行阶段计划写保护开启。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启执行阶段计划写保护。
- off:表示关闭执行阶段计划写保护。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:该参数适用于调试版本,主要用于问题定位、排查及调试。生产环境请按照默认值设置,避免影响正常业务。
设置不当的风险与影响:
- 开启该参数时,数据库内核在生成执行计划后,会严格防护并禁止在执行阶段修改计划。
- 该参数通过系统调用mprotect实现内存保护,开启该参数时,在高负载、频繁或大范围使用修改内存场景下会带来额外耗时。
- 如果内存不足导致mprotect资源不足或者出现修改执行计划的动作,会触发进程保护性重启防护。
disable_gpc_store
参数说明:GUC参数enable_global_plancache为on时,用于阻止后续执行计划存入全局计划缓存。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示后续执行计划不可存入全局计划缓存。
- off:表示后续计划计划可存入全局计划缓存。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:enable_global_plancache为off,该GUC设置无意义。该参数设置后,后续执行计划不再存入全局共享缓存,可能导致本会话内存开销变大,请谨慎设置。
enable_stream_pbe
参数说明:设置优化器在数据节点上是否对STREAM分布式计划使用缓存执行计划的优化。
- enable_global_plancache = on时,不支持stream pbe优化。
- 需依赖参数enable_stream_operator开启,enable_stream_pbe的优化功能才会生效。
- 由不支持stream pbe的版本升级至支持stream pbe的版本,升级未提交期间不支持stream pbe优化执行方式。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示优化器在数据节点上对STREAM分布式计划使用缓存执行计划的优化。
- off:表示不使用优化。
默认值:on
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后可能会增加生成计划的开销。
gpc_clean_timeout
参数说明:本参数用于控制不使用的共享计划的保留时间。在开启enable_global_plancache的情况下,如果共享计划列表里的计划超过gpc_clean_timeout的时间没有被使用,则会每隔一段时间被清理一次。
参数类型:整型
参数单位:s(秒)
取值范围:300 ~ 86400
默认值:1800(即30min)
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过大可能导致GPC占用内存过多,建议充分测试后设置合理值。
enable_gpc_grayrelease_mode
参数说明:分布式集群下,开启GPC需要重启集群。如果需要在不重启集群的情况下开启GPC,需要用enable_gpc_grayrelease_mode控制滚动开启GPC或关闭GPC。
分布式集群上操作方式。
开启GPC:
- 在所有DN节点开启enable_gpc_grayrelease_mode。
- 在所有CN节点开启enable_gpc_grayrelease_mode。
- 开启GPC参数,由于GPC是POSTMASTER参数,需要先reload参数,之后轮询kill节点,使重新拉起的节点上GPC生效。
关闭GPC:
- 首先确定enable_gpc_grayrelease_mode是on的状态,reload关闭GPC参数,然后轮询kill节点,使重新拉起的节点上GPC生效。
- 在所有CN节点关闭enable_gpc_grayrelease_mode。
- 在所有DN节点关闭enable_gpc_grayrelease_mode。
参数类型:布尔型
参数单位:无
取值范围:
- on:滚动开启GPC。
- off:关闭GPC。
默认值:off
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:此参数打开会影响pbe报文收发逻辑,需严格按照参数说明指定顺序设置,避免不合理报错。
enable_opfusion
参数说明:控制是否对简单查询进行查询优化。
- 只支持indexscan和indexonlyscan,且全部WHERE语句的过滤条件都在索引上。
- 只支持单表增删改查,不支持join、using。
- 只支持行存表,不支持分区表,表不支持有触发器。
- 不支持active sql、QPS等信息统计特性。
- 不支持正在扩容和缩容的表。
- 不支持查询或者修改系统列。
- 只支持简单SELECT语句,例如:
SELECT c3 FROM t1 WHERE c1 = ? and c2 =10;
仅可以查询目标表的列,c1和c2列为索引列,后边可以是常量或者参数,可以使用 for update。
- 只支持简单INSERT语句,例如:
INSERT INTO t1 VALUES (?,10,?);
仅支持一个VALUES,VALUES里面的类型可以是常量和参数,不支持returning。
- 只支持简单DELETE语句,例如:
DELETE FROM t1 WHERE c1 = ? and c2 = 10;
c1和c2列为索引列,后边可以是常量或者参数。
- 只支持简单UPDATE语句,例如:
UPDATE t1 SET c3 = c3+? WHERE c1 = ? and c2 = 10;
c3列修改的值可以是常量和参数,也可以是一个简单的表达式,c1和c2列为索引列,后边可以是常量或者参数。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后将不使用SQLBypass特性。SQLBypass针对简单增删改查语句采用简化的执行路径,以减少条件过滤、投影列计算、算子初始化和执行等带来的执行开销。关闭该参数后,参数说明中给定的简单增删改查语句将使用通用的执行流程,从而影响对应场景下的性能。
sql_beta_feature
参数说明:标识开启的可选SQL引擎Beta特性,其中包括对行数估算、查询等价估算等优化。开启它们可以对特定的场景进行优化,但也可能会导致部分没有被测试覆盖的场景发生性能劣化。在特定的客户场景中,通过此GUC参数对查询重写规则进行设置,使得查询效率最优。
此参数可以控制SQL引擎Beta特性的组合,比如有多个Beta特性:feature1、feature2、feature3、feature4,可以设置:
set sql_beta_feature=feature1; --启用SQL引擎Beta特性feature1 set sql_beta_feature=feature2,feature3; --启用SQL引擎Beta特性feature2和feature3 set sql_beta_feature=none; --关闭所有可选SQL引擎Beta特性
参数类型:字符串
参数单位:无
取值范围:
- none:不使用任何Beta优化器特性。
- sel_semi_poisson:使用泊松分布对等值的半连接和反连接选择率进行校准。
- sel_expr_instr:使用字符串匹配的行数估算方法对instr(col, 'const') > 0, = 0, = 1进行更准确的估算。
- param_path_gen:生成更多可能的参数化路径。
- rand_cost_opt:对小数据量表的随机读取代价进行优化。
- param_path_opt:利用表的膨胀系数优化索引analyze信息。
- page_est_opt:优化对表索引analyze信息的relpages估算。
- no_unique_index_first:关闭主键索引扫描路径优先的优化。
- join_sel_with_cast_func:估算join行数的时候支持类型转换函数。
- canonical_pathkey:正则化pathkey生成置前(pathkey:标记数据有序性键值的集合)。
该选项打开之后,可能会导致带order by等语句,在有外连接的情况下,输出数据语义和标准不一样。请联系华为工程师再确定是否打开该参数。
- index_cost_with_leaf_pages_only:估算索引代价时考虑索引叶子节点。
- partition_opfusion:支持数据库在运行过程中轻量缓存分区表的一些数据结构,执行处理轻量化。当前版本不生效。
- a_style_coerce:开启Decode类型转换规则兼容ORA,详见UNION,CASE和相关构造章节中的“对于case,在ORA兼容模式下的处理”部分内容。
- plpgsql_stream_fetchall:在存储过程中for loop或cursor上执行的sql走stream场景下,开启获取所有tuple结果。
- partition_fdw_on:支持基于分区表创建GaussDB foreign table下的相关SQL。
- predpush_same_level:开启predpush hint控制同层参数化路径的功能。
- disable_bitmap_cost_with_lossy_pages:关闭bitmap路径代价中对lossy pages代价的计算。
- enable_upsert_execute_gplan:pbe场景下,on duplicate key update语句中update子句带有参数时,设置enable_upsert_execute_gplan允许通过gplan执行。
- disable_text_expr_flatten:关闭text和数值类型(numeric, bigint)进行比较运算时自动内联表达式的功能。
默认值:"sel_semi_poisson,sel_expr_instr,rand_cost_opt,param_path_opt,page_est_opt"
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。该参数控制多种查询优化和兼容性行为,部分选项设置存在风险,建议谨慎使用。若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。
设置不当的风险与影响:需充分测试,否则可能产生意料之外的风险。
enable_global_stats
参数说明:标识当前统计信息模式。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示采用全局统计信息收集模式。
- off:表示收集集群第一个节点的统计信息,此时可能会影响生成查询计划的质量,但信息收集性能较优,建议谨慎设置。
默认值:on
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会影响集群环境下查询计划生成质量。
default_statistics_target
参数说明:为没有用ALTER TABLE SET STATISTICS设置字段目标的表设置缺省统计目标。此参数仅影响统计信息的目标采样行数,实际采样行数还会受到内存参数maintenance_work_mem的限制。
参数类型:整型
参数单位:无
取值范围:-100 ~ 10000
- 此参数设置为正数时,代表统计信息直方图预期桶的数量,统计信息采样行数为default_statistics_target * 300。
- 此参数设置为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%,采样行数为总行数 * 5%。
默认值:100
- 比默认值大的正数数值增加了ANALYZE所需的时间,但是可能会改善优化器的估计质量。
- 调整此参数可能存在性能劣化的风险,如果某个查询劣化,可以考虑:
- 恢复默认的统计信息。
- 使用plan hint调整到之前的查询计划。详细请参见《SQL调优指南》中“使用Plan Hint进行调优”章节。
- 当此guc参数设置为负数时,如果计算的采样样本数大于等于总数据量的2%,且用户表的数据量小于1600000时,ANALYZE所需时间相比guc参数为默认值的时间会有所增加。
- 当此guc参数设置为负数时,autoanalyze不生效。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在调整此参数之前,应根据具体的工作负载和查询模式进行综合评估。对于数据特征分布不均匀或数据量大的表,可能需要手动调整该参数值。
设置不当的风险与影响:
- 如果default_statistics_target设置过高,可能会增加 ANALYZE 操作的时间和资源消耗,因为需要收集更多的样本数据来生成统计信息。这可能导致数据库维护的开销增大,特别是在大型表上。
- 如果default_statistics_target 设置过低,可能会降低统计信息的准确性,从而影响查询优化器生成高效查询计划的能力,导致查询性能下降。
default_gsi_statistics_target
参数说明:为全局二级索引设置缺省统计目标。
参数类型:整型
参数单位:无
取值范围:-100 ~ 3000000
- 此参数设置为正数时,代表统计信息的样本数量。
- 此参数设置为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%。
默认值:0
- 默认值为0表示采用内部默认计算采样率的方法进行采样。
- 调整此参数可能存在性能劣化的风险,如果某个查询劣化,可以考虑:
- 恢复默认的统计信息。
- 使用plan hint来调整到之前的查询计划。详细请参见《SQL调优指南》中“ 使用Plan Hint进行调优”章节。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在调整此参数之前,应根据具体的工作负载和查询模式进行综合评估。对于数据特征分布不均匀或数据量大的表,可能需要手动调整该参数值。
设置不当的风险与影响:
- 如果default_gsi_statistics_target设置过高,可能会增加ANALYZE操作的时间和资源消耗,因为需要收集更多的样本数据来生成统计信息。这可能导致数据库维护的开销增大。
- 如果default_gsi_statistics_target设置过低,可能会降低统计信息的准确性,从而影响查询优化器生成高效查询计划的能力,导致查询性能下降。
opt_mcv_buckets_global
参数说明:为未通过“ALTER TABLE <table> ALTER COLUMN <attr> SET (OPT_MCV_BUCKETS = <val>)”设置的字段,设置高频值(MCV)统计信息的最大存储桶数量。该参数仅指定高频值存储个数的上限,实际高频值个数由实际采样数据分布决定。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000。设置为0时,表示自动根据采样行数计算高频值(MCV)个数。
默认值:
- 新安装的数据库:100。
- 从历史版本升级上来的数据库:若历史版本不支持该GUC参数,升级后的默认值为0;若历史版本支持该GUC参数,升级后默认值保留原设置。
- 在PDB场景内,若未设置该参数,则继承来自全局的设置。
- 参数修改后仅对后续ANALYZE生效,存量表旧统计信息不会自动刷新,需手动执行“ANALYZE 表名;”,重新采集统计或等待自动触发统计信息采集。
- 若单表个别列需要更高桶数上限,可通过列级自定义统计参数单独放开,语法为:
ALTER TABLE <table> ALTER COLUMN <attr> SET (OPT_MCV_BUCKETS = <val>)
设置后该列不受全局参数opt_mcv_buckets_global约束。
- 升级观察期期间设置此参数无效。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在调整此参数之前,应根据具体的工作负载和查询模式进行综合评估。对于数据分布里高频值特别多的表,可能需要手动调整该参数值。
设置不当的风险与影响:
- 如果opt_mcv_buckets_global设置得过高,会收集更多的高频值(MCV),可能会增加ANALYZE操作的时间和资源消耗,从而导致数据库维护开销增大,特别是对于大型表。
- 如果opt_mcv_buckets_global设置得过低,可能会降低代价估算的准确性,从而影响查询优化器生成高效查询计划的能力,导致查询性能下降。
auto_statistic_ext_columns
参数说明:表示会根据数据表上的组合索引的前auto_statistic_ext_columns列,收集多列统计信息。例如:某组合索引为(a,b,c,d,e),此GUC参数设为3,则会在组合列(a,b)、(a,b,c)上产生多列统计信息。多列统计信息可以在组合条件查询时,使优化器更准确地估计基数。
- 系统表不会生效。
- 组合列中的所有列的类型,都支持比较函数'='和'<',统计信息才会生效。
- 索引中的系统伪列,如tableoid、ctid不会被收集。
- 默认会收集distinct值、不带NULL的高频值、带NULL的高频值。自动创建的多列统计的信息不收集智能统计信息,只收集高频值和带NULL的高频值。
- 如果创建某多列统计信息的索引被删除,并且没有其它索引包含该多列组合,在下一次analyze的时候,该多列统计信息会被删除。
- 如果该参数由大变小,新的索引会依据该参数产生多列统计信息,而已经产生的超过该参数长度的多列统计信息,不会被删除。
- 如果用户希望禁用某一特定组合的多列统计信息,又希望使用其它多列统计信息,可以不修改该参数,而使用DDL命令'ALTER TABLE tablename disable statistics ((column list))'的方式,禁用特定的多列组合。
- 自动创建多列统计信息会跳过相关性不强的多列。如果单列的NDV(去重后的数量)乘积与多列的NDV达到80%以上相接近,则判定该多列相关性不强。手动创建的多列统计信息或自动创建的多列统计信息NDV为-1不需判断相关性。
- 如果分布式下采用百分比采样的方式,则CN上不会自动创建多列统计信息。
- 自动创建多列统计信息的功能打开后,因增加了计算统计信息阶段的开销,当组合索引数量较多时,analyze的性能会较之前有轻微下降。
参数类型:整型
参数单位:无
取值范围:1 ~ 4。1表示不会自动收集多列统计信息。
默认值:
- 新安装的数据库:4。
- 从506.1之前版本升级的数据库:升级后默认值为1。
- 从506.1及之后版本升级的数据库:升级后的参数值保留原设置。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在调整该参数值时,可考虑以下因素:
- 表的大小和数据特性,例如多列相关性。
- 查询模式,特别是查询中涉及的列和索引。
- 系统可用的资源,例如CPU、内存和存储空间。
设置不当的风险与影响:
- 设置的值过高可能会使得ANALYZE操作变得频繁,增加了数据库的维护开销,尤其是在大型表上。
- 如果设置的值过低,可能无法充分捕捉到表中列之间的相关性,导致查询优化器不能生成最优的查询计划。
constraint_exclusion
参数说明:控制查询优化器使用表约束查询的优化。
参数类型:枚举类型
参数单位:无
取值范围:
- on:表示检查所有表的约束。
- off:表示不检查约束。
- partition:表示只检查继承的子表和UNION ALL子查询。
默认值:partition
- 当constraint_exclusion为on时,优化器用查询条件和表的CHECK约束比较,并且在查询条件和约束冲突的时候忽略对表的扫描。
- 目前,constraint_exclusion默认被打开,通常用来实现表分区。为所有的表打开该参数时,对于简单的查询强加了额外的规划,并且对简单查询没有什么好处。如果不用分区表,可以关掉该参数。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。如果业务查询中经常使用到表的约束,并且这些约束有助于优化查询,则保持该参数开启可能是有益的。反之,如果这些约束对于查询优化没有太大帮助,关闭该参数可能更有利于性能。
设置不当的风险与影响:设置不当可能会影响查询性能。
cursor_tuple_fraction
参数说明:优化器估计游标获取行数在总行数中的占比。
参数类型:浮点型
参数单位:无
取值范围:0 ~ 1
默认值:0.1
比默认值小的值与使用“fast start”为游标规划的值相偏离,从而使得前几行恢复的很快而抓取全部的行需要很长的时间。比默认值大的值加大了总的估计时间。在最大的值1.0处,像正常的查询一样规划游标,只考虑总的估计时间和传送第一行的时间。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如果实际应用中游标操作经常访问表中的大部分行,可以适当增加此参数的值。
设置不当的风险与影响:设置不当可能导致查询性能下降。
from_collapse_limit
参数说明:根据生成的FROM列表的项数来判断优化器是否将子查询合并到上层查询,如果FROM列表项个数小于等于该参数值,优化器会将子查询合并到上层查询。
参数类型:整型
参数单位:无
取值范围:1 ~ 2147483647
默认值:8
比默认值小的数值将降低规划时间,但是可能生成差的执行计划。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如果查询中经常需要处理多个子查询,并且这些子查询可以有效地合并以提高查询性能,可以考虑增大此参数的值。反之,如果合并子查询导致性能下降或增加了优化器生成执行计划的时间,可以考虑减小该值。
设置不当的风险与影响:设置不当可能会导致查询性能下降。
join_collapse_limit
参数说明:根据得出的列表项数,来判断优化器是否把除FULL JOIN之外的JOIN构造重写到FROM列表中。
参数类型:整型
参数单位:无
取值范围:1 ~ 2147483647
默认值:8
- 设置为1会避免任何JOIN重排。这样就使得查询中指定的连接顺序就是实际的连接顺序。查询优化器并不是总能选取最优的连接顺序,高级用户可以选择暂时把这个参数设置为1,然后指定它们需要的连接顺序。
- 比默认值小的数值减少规划时间但也降低了执行计划的质量。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。降低参数值减少了规划时间,但可能降低计划生成质量;提高参数值增加了规划时间,但有可能生成更优计划。
设置不当的风险与影响:规划时间与计划生成质量的权衡,设置不当可能导致其中一方效果难以接受。
plan_mode_seed
参数说明:该参数为调测参数,目前仅支持OPTIMIZE_PLAN和RANDOM_PLAN两种。
参数类型:整型
参数单位:无
取值范围:-1 ~ 2147483647
- 0:表示OPTIMIZE_PLAN模式,即通过动态规划算法进行代价估算生成最优plan。
- -1:表示RANDOM_PLAN模式,即随机生成plan,且用户不指定生成随机数的种子标识符seed值,由优化器随机生成[1, 2147483647]范围内的整数值,并根据随机数生成随机的执行计划。
- [1, 2147483647]范围内的整数值:表示RANDOM_PLAN模式,即随机生成plan,且用户指定的生成随机数的种子标识符seed值,优化器根据seed值生成随机的执行计划。
默认值:0
当该参数不为0时,查询指定的plan hint不会生效。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:当该参数设置为RANDOM_PLAN模式时,优化器会随机生成执行计划,该执行计划可能不是最优计划,从而对查询性能产生影响。所以,在升级、扩容、缩容等正常业务操作或运维过程中,建议将该参数设置为0。
设置不当的风险与影响:设置不当可能导致查询性能下降。
enable_random_datanode
参数说明:表示是否允许开启复制表DN随机查找功能,复制表在每个DN存放一份完整数据,随机选取可以缓解节点压力。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许开启复制表DN随机查找功能。
- off:表示不允许开启复制表DN随机查找功能。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致节点压力激增。
hashagg_table_size
参数说明:用于设置执行HASH JOIN操作时HASH表的大小。
参数类型:整型
参数单位:无
取值范围:0 ~ 1073741823,其中0表示数据库将根据需要自动调整HASH表的大小。
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在实际应用中,如果遇到特定的查询场景,比如处理大量数据的聚合操作,可能需要手动调整此参数以优化性能。
设置不当的风险与影响:增加HASH表的大小可以减少HASH AGG操作中的磁盘I/O,因为更多的数据可以保留在内存中。然而,如果设置HASH表大小过大,可能会占用过多内存,导致内存不足。如果设置过小,可能无法有效地利用内存,导致更多的磁盘I/O操作,从而降低查询速度。
enable_codegen
参数说明:标识是否允许开启代码生成优化,目前代码生成使用的是LLVM优化。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许开启代码生成优化。
- off:表示不允许开启代码生成优化。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:开启参数,可能会导致表达式查询场景资源使用上涨。
codegen_compile_thread_num
参数说明:该参数用于设置Codegen编译线程的线程数量。
参数类型:整型
参数单位:无
取值范围:1 ~ 8
默认值:1
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,当业务的并发量较大且业务的性能瓶颈在表达式执行流程时再做修改。
设置不当的风险与影响:线程数量设置过多,可能会导致系统性能下降。但当业务并发量较大时,可适当调大线程数以提升吞吐性能。
llvm_max_memory
参数说明:此参数设置Codegen编译产生的IR(包括缓存的和正在使用的)所占用的最大内存。Codegen使用的内存不采用预占的方式申请,属于max_dynamic_memory的一部分,且受llvm_max_memory参数的限制。
参数类型:整型
参数单位:kB
取值范围:0 ~ 2147483647,超过设定值则不再使用Codegen执行逻辑,降级为原有递归执行逻辑。当到达该上限触发执行降级后,调小llvm_max_memory的值无法立即释放多余IR所占用的内存,实际IR所占用的内存随着对应的SQL执行完毕后释放。
默认值:131072(即128MB)
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。例如,设置为100,不带单位,表示100kB;设置为16MB,带单位,表示16MB。取值如果要带单位,必须为kB、MB、GB。
设置建议:推荐使用默认值,当系统视图pv_total_memory_detail中llvm_used_memory项到达默认值上限且业务的性能瓶颈在表达式执行流程时,再做修改。
设置不当的风险与影响:
- 最大占用内存如果设置过小,则易使系统不再使用Codegen执行逻辑,影响功能使用。
- 最大占用内存如果设置过大,可能会造成LLVM的编译过多占用其他线程的资源,造成系统整体性能下降。
enable_codegen_print
参数说明:标识是否允许在log日志中打印所生成的LLVM IR函数。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许在log日志中打印IR函数。
- off:表示不允许在log日志中打印IR函数。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,当定位问题时再开启。
设置不当的风险与影响:若开启则会产生大量的log日志,占用磁盘I/O,从而使数据库系统前台查询的读写性能下降。
codegen_cost_threshold
参数说明:由于LLVM编译生成最终的可执行机器码需要一定时间,因此只有当实际执行的代价大于编译生成机器码所需要的代价和优化后的执行代价之和时,利用代码生成才有收益。codegen_cost_threshold标识代价的阈值,当执行估算代价大于该代价时,使用LLVM优化。codegen使用执行算子的plan_rows作为代价与codegen_cost_threshold进行比较,plan_rows的值可以通过explain命令查看。
参数类型:整型
参数单位:无
取值范围:0 ~ 2147483647
默认值:100000
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,当需要调整codegen机制的触发阈值时,再做修改。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_bloom_filter
参数说明:标识是否允许使用BloomFilter优化。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许使用BloomFilter优化。
- off:表示不允许使用BloomFilter优化。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
bloom_filter_build_max_rows
参数说明:启用BloomFilter优化时,HashJoin的Build侧可以创建BloomFilter的最大数据量。如果build侧的数据量高于该值,则不会建立BloomFilter。
参数类型:整型
参数单位:条
取值范围:1 ~ 2147483647
默认值:2000000
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。该参数仅在参数enable_bloom_filter打开的情况下生效。
设置建议:在存储与计算资源充足的情况下,可以适当调大此值以获得更佳性能。
设置不当的风险与影响:当存储与计算资源不足,query_dop较高(>16)并且该值设定过大(>2000000)的情况下,有可能引起系统性能下降。
bloom_filter_apply_threshold
参数说明:启用BloomFilter优化时,HashJoin的Apply侧可以创建BloomFilter的最小数据量。如果apply侧的数据量低于该值,则不会建立BloomFilter。
参数类型:整型
参数单位:条
取值范围:1 ~ 2147483647
默认值:10000
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。该参数仅在参数enable_bloom_filter打开的情况下生效。
设置建议:建议设置为1000~20000之间的整数。
设置不当的风险与影响:该值设置过大时(>20000),会丢失添加BloomFilter后可以优化性能的场景。该值设置过小时(<1000),会对数据规模较小的查询也进行BloomFilter的添加,反而引起性能劣化。
- 开启/设置enable_bloom_filter、bloom_filter_build_max_rows参数后,仍需要满足BloomFilter实现/原理限制,才会生成BloomFilter。
- 关于BloomFilter实现/原理限制:
- build端需要在HashJoin内侧。
- apply端必须是IMCVScan。
- 不支持Left Join、Full Join和Left Anti Join种类的Join。
- BloomFilter在apply/build时跨越了无法下推的算子,如Func Agg、Limit等。
- BloomFilter调用Semi Join接口进行估算,只有外表选择率小于2/3才可以创建BloomFilter,外表选择率通过统计信息计算得到,详见《开发指南》中“特性使用指导 > CBO优化器 > 技术原理 > 统计信息”章节。
build端节点与apply端节点可以通过观察计划确认。对于计划中的HashJoin节点,下方的子节点为build侧,上方的子节点为apply侧。以下述计划为例,Imcv Scan on public.row_hashjoin_table_01 a为build侧,Imcv Scan on public.row_hashjoin_table_02 b为apply侧:
QUERY PLAN
--------------------------------------------------------------------------------------------------
Row Adapter (cost=3033.82..3033.82 rows=59804 width=48)
Output: a.c_int, a.c_bigint, a.c_smallint, b.c_int, b.c_bigint, b.c_smallint
-> Vector Sonic Hash Join (cost=374.00..3033.82 rows=59804 distinct=[200, 600] width=48)
Output: a.c_int, a.c_bigint, a.c_smallint, b.c_int, b.c_bigint, b.c_smallint
Hash Cond: (b.c_int = a.c_int)
Generate Bloom Filter On Expr: a.c_int
Generate Bloom Filter On Index: 0
-> Imcv Scan on public.row_hashjoin_table_02 b (cost=0.00..924.00 rows=75852 width=24)
Output: b.c_int, b.c_bigint, b.c_smallint
Filter: (b.c_int > 2400)
Filter By Bloom Filter On Expr: b.c_int
Filter By Bloom Filter On Index: 0
-> Imcv Scan on public.row_hashjoin_table_01 a (cost=0.00..299.00 rows=6000 width=24)
Output: a.c_int, a.c_bigint, a.c_smallint
Filter: (a.c_int > 2400) enable_extrapolation_stats
参数说明:对于日期类型,标识是否允许基于历史统计信息使用推理估算的逻辑。若使用该逻辑,对于未及时收集统计信息的表,可以提高估算的准确性,但也存在推理错误导致估算过大的可能。在日期类型数据定期插入的场景下,需要开启此开关。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许基于历史统计信息使用推理估算的逻辑。
- off:表示不允许基于历史统计信息使用推理估算的逻辑。
默认值:
- 新安装的数据库默认值为on。
- 若升级的基础版本不存在该GUC参数,默认值为on;若升级的基础版本存在该GUC参数,保留原设置。
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在启用enable_extrapolation_stats之前,应该评估数据的变化频率和查询模式。如果数据变化很快,而且查询优化器经常需要处理不完整的统计信息,启用这个参数可能会有所帮助。在正式启用之前,应该在测试环境中进行充分的测试,以确定启用外推统计信息对性能的具体影响。启用外推统计信息后,应密切监控查询性能和数据库的统计信息准确性,确保没有引入性能问题或导致统计信息的准确性大幅下降。
设置不当的风险与影响:打开该参数后,可能会存在推理错误导致查询性能下降的问题。
query_dop
参数说明:用户自定义的查询并行度。
参数类型:整型
参数单位:无
取值范围:-64 ~ 64
- [1,64]:打开固定SMP功能,系统会使用固定并行度。
- 0:打开SMP自适应功能,系统会根据资源情况和计划特征动态选取最优并行度。
- [-64,-1]:打开SMP自适应功能,并限制自适应选取的最大并行度。
- 在开启并行查询后,请保证系统CPU、内存、网络、I/O等资源充足,以达到最佳效果。
- 为了避免用户设置不合理的过大值造成性能劣化,系统会计算出该DN可用最大CPU核数,并以此来作为query_dop的上限。如果用户设置query_dop超过4并且同时超过该上限,那么系统会重置query_dop为该上限值。
默认值:1
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,在 CPU、内存、I/O 和网络带宽等资源充足的情况下,并行度越高,性能提升效果越好。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_analyze_check
参数说明:标识在生成计划的时候,对于在pg_class中reltuples和relpages均为0的表,是否允许检查这些表是否曾进行过统计信息的收集。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示允许检查。
- off:表示不允许检查。
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。启用检查可能会带来计划生成的开销,但会确保是否进行过统计信息的收集;如果确定大多数在pg_class中reltuples和relpages均为0的表无需额外收集统计信息,可保持关闭。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_sonic_hashagg
参数说明:标识是否依据规则约束使用基于面向列的hash表设计的Hash Agg算子。
参数类型:布尔型
参数单位:无
取值范围:
- 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详解请参见《SQL调优指南》中“SQL执行计划介绍 > 执行计划详解”章节。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致该场景下查询性能劣化。
enable_sonic_hashjoin
参数说明:标识是否依据规则约束使用基于面向列的hash表设计的Hash Join算子。
参数类型:布尔型
参数单位:无
取值范围:
- 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详解请参见《SQL调优指南》中“SQL执行计划介绍 > 执行计划详解”章节。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致该场景下查询性能劣化。
vector_engine_features
参数说明:标识向量化引擎可选特性的开关。开启这些特性不一定对执行性能有提升效果,在特定的业务场景中,通过此GUC参数对向量化引擎相关特性进行设置,使得执行性能最优。
此参数可以设置向量化引擎特性开关的组合。比如有多个特性:rule1、rule2、rule3、rule4,可以设置:
set vector_engine_features='rule1'; --启用向量化引擎特性rule1。 set vector_engine_features='rule2,rule3'; --启用向量化引擎特性rule2和rule3。 set vector_engine_features=none; --关闭所有可选向量化引擎特性。
参数类型:枚举类型
参数单位:无
取值范围:
- none:不使用任何可选向量化引擎特性。
- enable_ca_hashjoin:使用面向Cache-Aware HashTable设计的Ca Hash Join算子。
- enable_ca_hashagg:使用面向Cache-Aware HashTable设计的Ca Hash Agg算子。
默认值:enable_ca_hashjoin, enable_ca_hashagg
设置方式:该参数属于USERSET类型参数,请参见中表2对应设置方法进行设置。
设置建议:推荐使用默认值。如有其它必要,建议明确执行场景后,仅打开对应特性开关。
设置不当的风险与影响:关闭特性开关可能会导致某些场景下执行性能劣化,建议充分测试后使用对应特性开关。
- GUC参数中设置enable_ca_hashjoin时,该开关和基础开关enable_hashjoin存在依赖关系,enable_hashjoin关闭时,计划中不存在HashJoin,enable_ca_hashjoin无效。
- 当前开关仅适用于以下场景:
- 连接键
- 同类型连接键。如:int = varchar, 不支持。
- 非表达式连接键。如:a - 1 = b,不支持。
- 连接键支持的数据类型请参见表1。
- 连接类型
- Inner Join:支持。
- Right Join:部分支持。带有连接条件的情况下不支持,其他情况下支持。
- Semi Join:部分支持。非投影情况下支持,仅输出外表数据情况下支持,投影情况下、有输出内表数据情况下不支持。
- Anti Join:部分支持。非投影情况下支持,仅输出外表数据情况下支持,投影情况下、有输出内表数据情况下不支持。
- Right Semi Join:部分支持。仅输出内表数据情况下支持,有输出外表数据情况下不支持。
- Right Anti Join:部分支持。仅输出内表数据情况下支持,有输出外表数据情况下不支持。
- Full Join:不支持。
- Left Join:不支持。
- 其它
- 内表数据输出小于等于64列支持,大于64列不支持。
- 连接键
- 当开启enable_ca_hashjoin,且查询达到约束条件,使用面向Cache-Aware HashTable设计的Ca Hash Join算子时,在Explain Analyze/Performance的执行计划和执行信息中,算子显示为“Vector Ca Hash Join”,而当未达到该约束条件时,算子名称将显示为“Vector Sonic Hash Join”或者“Vector Hash Join” ,Explain详解请参见《SQL调优指南》中“SQL执行计划介绍 > 执行计划详解”章节。
- 当前开关仅适用于以下场景:
- GUC参数中设置enable_ca_hashagg时,该开关和基础开关enable_hashagg存在依赖关系,enable_hashagg关闭时,计划中不存在hashagg,enable_ca_hashagg无效。
- 当前开关仅适用于以下场景:
- 原向量化Agg支持的非numeric类型。
- Agg函数个数不超过21个。
- 下层算子返回的列仅含作为HashKey的列、用于聚集的列和与HashAgg无关的列(例外情况如SELECT col1::numeric FROM test_table GROUP BY col1; 这种情况下,下层算子可能会返回col1和col1::numeric,而只有col1会被作为HashKey)。
- Agg节点的unique_check标记为false(当前只有子查询的部分情况下可能为true)。
- 连接键支持的数据类型请参见表1。
- 当开启enable_ca_hashagg,且查询达到约束条件,使用面向Cache-Aware HashTable设计的Ca Hash Agg算子时,在Explain Analyze/Performance的执行计划和执行信息中,算子显示为“Vector Ca Hash Aggregate”,而当未达到约束条件时,算子名称将显示为“Vector Sonic Hash Aggregate”或者“Vector Hash Aggregate” ,Explain详解请参见《SQL调优指南》中“SQL执行计划介绍 > 执行计划详解”章节。
- 当前开关仅适用于以下场景:
enable_sonic_optspill
参数说明:标识是否对面向列的hash表设计的Hash Join算子进行下盘文件数优化。该参数打开时,在Hash Join算子下盘文件较多的时候,下盘文件数不会显著增加。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示优化面向列的hash表设计的Hash Join算子的下盘文件数。
- off:表示不优化面向列的hash表设计的Hash Join算子的下盘文件数。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致该场景下查询性能劣化。
plan_cache_mode
参数说明:标识在prepare语句中,选择生成执行计划的策略。
参数类型:枚举类型
参数单位:无
取值范围:auto、force_generic_plan、force_custom_plan
- auto:表示由优化器自动选择custom plan或者generic plan。
- force_generic_plan:表示强制走generic plan(软解析)。generic plan是指对于prepare语句生成计划,该计划策略会在执行execute语句的时候把参数bind到plan中,然后执行计划。这种方案的优点是每次执行可以省去重复的优化器开销;缺点是当bind参数字段上数据存在倾斜时该计划可能不是最优的,部分bind参数场景下执行性能较差。bind会绑定第一次传入的参数类型,如果同一占位符两次传入的参数类型不一致会导致报错。
- force_custom_plan:表示强制走custom plan(硬解析)。custom plan是指对于prepare语句,在执行execute的时候,把execute语句中的参数嵌套到语句之后生成的计划。custom plan会根据execute语句中具体的参数生成计划,这种方案的优点是每次都按照具体的参数生成优选计划,执行性能比较好;缺点是每次执行前都需要重新生成计划,存在大量的重复的优化器开销。
此参数只对prepare语句生效,一般用在prepare语句中参数化字段存在比较严重的数据倾斜的场景下。
默认值:auto
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:根据实际业务场景进行设置。
设置不当的风险与影响:设置不当可能会导致计划生成开销增加或计划生成质量下降。
enable_router
参数说明:是否打开手动设置下推节点功能,能将支持的查询语句下推到特定DN上执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:off
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:需手动设置下推节点以针对特定分布列时启用。
设置不当的风险与影响:此功能打开后,若设置错分布列,可能导致数据存入错误的DN,需谨慎使用。
router
参数说明:用于控制router功能的详细属性,仅在打开enable_router和enable_light_proxy后生效。该参数会根据表的hash分布列,计算给定的分布列所在DN,设置router后将支持的sql下推到该DN上执行。
参数类型:字符串
参数单位:无
取值范围:
该参数分为两部分,'schema_name.table_name,"distribute_keys"'(注意双引号),其具体含义如下:
- schema_name.table_name:表示schema名和表名,如不显示设置schema_name,则默认为current_schema。
- distribute_keys:分布表的所有分布列值,用逗号间隔开,且分布列值的顺序必须和表中分布列顺序一致。
默认值:""
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:需手动设置下推节点以针对特定分布列时启用。
设置不当的风险与影响:如果设置错router,可能导致数据存入错误的DN,导致不可预测的问题,需谨慎使用。
enable_force_vector_engine
参数说明:对于支持向量化的执行器算子,如果其子节点是非向量化的算子,通过设置此参数为on,强制生成向量化的执行计划。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示可以向量化的算子强制生成向量化。
- off:表示由向量化算子优化器决定是否向量化。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,在向量化业务场景下推荐打开。
设置不当的风险与影响:启用该参数可能导致查询性能劣化。
enable_auto_explain
参数说明:控制是否开启自动打印执行计划。该参数可用来定位慢存储过程或慢查询,只对当前连接的CN有效,不影响其他CN的执行。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,若需要查看执行计划,则开启,但会降低当前系统性能。
设置不当的风险与影响:开启后可能会降低当前系统性能。
auto_explain_level
参数说明:控制自动打印执行计划的日志等级。
参数类型:枚举类型
参数单位:无
取值范围:
- log:表示log级别及以上的日志会被打印。
- notice:表示notice级别及以上的日志会被打印。
默认值:log
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
auto_explain_log_min_duration
参数说明:控制自动打印执行计划的耗时阈值,整体耗时大于auto_explain_log_min_duration的执行计划才会被打印。比如该参数设置为0时,所有执行过的执行计划都会输出;设置为3000时,单次语句执行耗时超过3000毫秒的所有执行的执行计划会输出。
参数类型:整型
参数单位:ms(毫秒)
取值范围:0 ~ 2147483647
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,设置为100,不带单位,表示100ms;设置为2min,带单位,表示2min。取值如果要带单位,必须为ms、s、min、h、d。
设置建议:推荐使用默认值。可根据业务需要调整数值,以输出慢查询语句。
设置不当的风险与影响:设置过小可能会导致输出内容过多。
auto_explain_analyze_options
参数说明:控制自动打印执行计划是否显示运行时计划信息。该参数可以在DN日志中查看FQS和PGXC计划下推语句的实际执行计划,只对当前连接的CN有效,不影响其他CN的执行。
- 该参数功能需要enable_auto_explain打开才能使用,继承enable_auto_explain约束,对于EXPLAIN语句不打印,只支持正常执行的语句计划打印。
- DN上计划日志仅在enable_auto_explain = true且auto_explain_level = log场景下生效。
- 设置除None外的任何值,都会包括ANALYZE功能,显示基本的运行时计划信息。
- 不支持Stream计划、SMP计划、SqlBypass计划。如果计划没有显示运行时信息,检查是否生成了Stream计划、SMP计划、SqlBypass计划。
- 每个节点只能显示当前节点的计划信息,例如CN不会在日志或客户端中显示DN的计划信息。
- 当前版本不支持auto explain显示cpu运行时计划信息,参数取值范围中Cpu作为预留选项使用。
参数类型:枚举类型
参数单位:无
取值范围:
- None:设置自动打印执行计划不显示运行时计划信息。
- Analyze:收集基本的运行时计划信息,包括rows、time。
- Buffers:收集运行时rows、time、buffer相关信息。
- Cpu:收集运行时rows、time、cpu相关信息。
默认值:None
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,若需要查看执行时计划信息,则开启,但会降低当前系统性能。
设置不当的风险与影响:开启后可能会降低当前系统性能。
max_datanode_for_plan
参数说明:设置生成FQS计划时DN上执行计划显示的个数。DN上计划显示的个数由集群中的DN数和该参数值的更小者决定。
参数类型:整型
参数单位:无
取值范围:0 ~ 8192
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:在需要更详细的多节点执行计划时可修改此值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_inner_unique_opt
参数说明:控制是否对嵌套循环连接、哈希连接、排序归并连接进行Inner Unique优化,即在连接条件中内表对应的属性满足唯一性约束的情况下,减少匹配次数。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致对应场景查询性能下降。
enable_indexscan_optimization
参数说明:控制是否对astore存储引擎下的btree索引扫描(IndexScan和IndexOnlyScan)进行优化。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用。
- off:表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会导致对应场景查询性能下降。
enable_uniq_idx_a_compat
参数说明:控制复合唯一索引针对Null值是否兼容ORA数据库。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示兼容。
- off:表示不兼容。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:该参数仅在ORA兼容性的数据库中适用,建议使用默认值。
设置不当的风险与影响:设置不当可能会影响兼容性或导致查询规划开销增加。
create_gsi_opt
参数说明:控制全局二级索引GSI创建模式。注意,除none模式外,其他模式需要打开enable_stream_operator参数才会生效。
参数类型:枚举类型
参数单位:无
取值范围:
- none:使用PGXC的方式创建。
- build:使用STREAMING+GSI BUILD算子的方式创建。
- parallel:使用STREAMING+GSI BUILD算子+并行排序的方式创建(需要设置基表的parallel_workers参数)。
默认值:build
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置不当可能导致全局二级索引创建性能下降。
session_sequence_cache
参数说明:在当前会话下,一次性交互申请的sequence数值,会话结束后会自动丢弃未用完的值。
参数类型:整型
参数单位:无
取值范围:1 ~ 2147483647
默认值:10
默认值10,在高并发场景下,兼顾单条插入和批量插入,性能都会有比较好的表现。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:用户在使用sequence大批量导入数据时,可以通过调大该参数,提高插入速度,增加高并发性能;用户在高并发单条插入数据时,将该参数设置为1,减少sequence的跳变。如对连续性有强要求,需要在创建sequence的时候指定需要的cache,该参数如果大于cache指定的值会自动失效。
设置不当的风险与影响:设置过大时,可能导致单条插入性能下降;设置过小时,可能导致批量插入性能下降。
enable_invisible_indexes
参数说明:设置优化器是否可以使用不可见索引。
索引在被设置为不可见状态后,可能会对查询语句的性能产生影响。此时若不想变更索引可见性状态,且打算使用不可见索引,可设置enable_invisible_indexes参数为on。
参数类型:布尔型
参数单位:无
取值范围:
- on:优化器可以使用不可见索引。
- off:优化器不可以使用不可见索引。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:使用不可见索引但未开启此参数时,可能导致忽略不可见索引,因此可能有更优计划未被考虑。
enable_dynamic_samplesize
参数说明:是否动态调整采样行数。对于超过一百万行的大表,收集统计信息时动态调整采样行数,可以提高统计信息准确性。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示该功能打开。
- off:表示该功能关闭。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后可能会降低统计信息准确性。
动态调整采样行数的功能仅支持绝对值采样。
default_statistic_granularity
参数说明:默认情况下,当未指定PARTITION_MODE时,指定默认收集哪些分区表分区级统计信息。对非分区表不生效。
参数类型:枚举类型
参数单位:无
取值范围:
- all:收集整表、一级分区的统计信息。
- global:收集整表的统计信息。
- partition:收集一级分区的统计信息。
- global_and_partition:收集整表、一级分区的统计信息。
- all_complete:收集整表、一级分区的统计信息,相对于取值为all的场景,采样率更高,可能带来更长的统计信息耗时。
默认值:global
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。如果需要收集分区级统计信息,可根据实际需要设置,但可能会对ANALYZE的性能产生一定影响。
设置不当的风险与影响:需要在维护开销与统计信息准确性间权衡,设置不当可能导致一方代价过大。
升级场景下,升级后该GUC参数值和升级前保持一致。
enable_fast_numeric_agg
参数说明:该参数控制是否开启针对numeric数据类型的agg优化。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启numeric数据类型的agg优化。
- off:表示不开启numeric数据类型的agg优化。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后可能会导致对应场景查询性能下降。
enable_poisson_outer_optimization
参数说明:该参数用于控制计划生成阶段计算选择率时,是否用泊松修正outer join中外表上的filter条件的选择率。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示泊松不修正outer join中外表的filter条件的选择率,即计算选择率时不将外表的filter条件按照可下推计算。
- off:outer join外表的filter条件下推计算选择率。
默认值:升级上来的集群默认为off,新安装的集群默认为on。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:可能无法选中较好的执行计划,出现慢sql。
当GUC参数cost_model_version>=5或为0且enable_poisson_outer_optimization为on时,相关功能才会生效。
enable_predreorder_by_rank
参数说明:设置进行计划生成时,是否要将单一基表的多个过滤条件基于其选择率、计算代价进行重排序,以减小执行开销。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示进行计划生成时,将多个过滤条件基于其选择率、计算代价进行重排序。
- off:表示进行计划生成时,不将多个过滤条件基于其选择率、计算代价进行重排序。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭后将导致部分计划执行无法得到优化。
当cost_model_version>=6或为0且enable_predreorder_by_rank为on时,相关功能才生效。
enable_shared_set_update
参数说明:对于UPDATE语句中使用子查询更新多个列的场景,该参数可以控制优化器是否对每个待更新列分别生成一个子计划,当打开该参数时,将只生成一个子计划在多个列之间共享。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示仅根据子查询生成一个子计划。
- off:表示为每个待更新列,分别生成一个子计划。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭可能会降低使用子查询更新多个列的查询执行效率,且增加查询优化和执行开销。
- 当cost_model_version>=6或为0且enable_shared_set_update为on时,相关功能才生效。
- 当enable_shared_set_update为on且生成shared set update计划时,如果语句中存在IMCV表,则不会生成IMCV SCAN计划。
cursor_sharing
参数说明:设置是否启用自动参数化或相同语句计划复用功能。
参数类型:枚举类型
参数单位:无
取值范围:
- force:启用特性自动参数化和特性相同语句计划复用功能。如果满足自动参数化条件,则优先通过自动参数化缓存;满足不了则通过相同语句计划复用缓存。例如在MYSQL或M兼容模式下,不支持参数化,会自动按照cursor_sharing = exact的行为实现。
- exact:仅启用特性相同语句计划复用功能。
- off:自动参数化和特性相同语句计划复用两个功能均关闭。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数设置为force时,语句中的部分常量将被替换为参数。可能会导致SQL计划的改变,可能引起计划性能下降,并可能会影响语法树,造成unique_sql_id的变化,导致sqlpatch失效。
设置为force或exact,可能会导致占用内存空间增大,且如果计划模板无法复用的,无法通过计划复用带来性能提升,在设置参数时请确认业务模型是否适合。在计划内存上限管控的情况下,如果存入大量不同的sql模板,会引起计划缓存内存占用过多,触发计划内存上限淘汰,导致性能下降,极端场景下可能会引起掉零。
请在充分理解参数含义,并经过测试验证后进行修改。
- 启用自动参数化后,其执行机制与手动绑定参数保持一致。
- 启用自动参数化后,由于查询语句被自动改写为参数化形式,执行过程中输出的WARNING或ERROR信息(如提示文本、行号定位等)可能与未启用自动参数化时的输出存在差异,属于预期行为。
opt_use_static_stats
参数说明:当开启此功能时,可以直接从PG_CLASS系统表中读取行数和页面数等统计信息,而不是对基表进行页面采样来获取,常用于手动验证优化器在给定统计信息的前提下,计划生成的效果。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示从PG_CLASS中直接读取统计信息。
- off:表示按照默认方式,对基表进行采样来获取行数和页面数等统计信息。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:打开该开关,会导致优化器不感知实际表大小,统计信息仅参考PG_CLASS系统表。
当cost_model_version>=6或为0且opt_use_static_stats为on时,相关功能才生效。
enable_sel_cache
参数说明:当开启此功能时,在路径生成阶段,会针对经过优化器推导所得的、左右操作数均为普通列的、等值连接谓词进行选择率缓存,在路径搜索阶段进行谓词选择率的重复计算时,会使用该缓存加速计算。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示使用此功能。
- off:表示不使用此功能。
默认值:
- on:新安装的数据库默认值。
- off:从506.1.0之前版本升级到当前版本,此参数默认值为off;升级前若存在该参数,无论如何设置,升级后默认值均为off。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该开关,可能会导致优化器路径生成阶段性能下降。
- 不支持对多列统计信息的结果进行缓存。
- 当cost_model_version>=7或为0且enable_sel_cache为on时,相关功能才生效。
- 当且仅当遇到普通列构成的等值连接谓词时,才会构建缓存加速选择率计算。
- 如果左右操作数包含类型转换,且被转换的类型之间是二进制强制转化的,也可以使用此功能加速计算,具体可参考PG_CAST中对于castmethod的描述。
- 当同时关闭enable_hashjoin和enable_mergejoin时,此功能不生效。
stats_history_record_limit
参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留数目上限。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息数量达到该阈值,再次收集新的统计信息时,时间较早的统计信息将被清理。
参数类型:整型
参数单位:条
取值范围:0 ~ 100
默认值:10
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如果需要记录更多历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。
设置不当的风险与影响:设置过大可能会对analyze的性能产生一定影响。
stats_history_retention_time
参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留时间。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息的保留时间超过该阈值后,再次收集新的统计信息时,超过保留时间的统计信息将被清理。
参数类型:浮点型
参数单位:d(天)
取值范围:-1、0 ~ 365000,-1表示历史统计信息不因时间而清除。
默认值:31
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如果需要记录更早时间的历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。
设置不当的风险与影响:设置过大可能会对analyze的性能产生一定影响。
opt_behavior_knob
参数说明:用于控制优化器在特定场景下的行为变更,以进行手动查询调优。
参数类型:字符串
参数单位:无
取值范围:所有特定场景行为变更开启,可由SHOW opt_behavior_knob查看:
1 | ALL,on(ROWID_OPT,DIST_QUERY_ADAPTIVE_FALLBACK,XC_REMOTE_JOIN_PARAM,MERGE_INTO_SHIP,SUBLINK_QUERY_SHIP,SUBPLAN_SORTED_PATH_FIX,PARAM_PATH_SKIP_CACHING_VARRATIO,PREFER_UNIQUE_INDEX,PREFER_LONGER_INDEX,PPI_COST_MODEL1,PREDICATE_INFER_ENHANCE,HIERARCHY_QRY_CHECK_SUBLINK_PULLUP,ACTUAL_RANGE_BY_INDEX,FIX_PART_INDEX_SCAN_COST,OPT_KNOB_20260703_1,OPT_KNOB_20260807_1,OPT_KNOB_20260728_1,OPT_KNOB_20260812_1),off() |
- PARAM_PATH_SKIP_CACHING_VARRATIO:控制在生成参数化路径时,进行基数估计阶段,跳过相关谓词选择率的缓存,以保证上层连接基数估计的准确性。
- SUBPLAN_SORTED_PATH_FIX:控制子链接sorted path相关路径选择,避免代价低的路径直接淘汰,保证路径选择的准确性。
- DIST_QUERY_ADAPTIVE_FALLBACK :控制在CN节点资源紧张状态下(内存/CPU使用率超过80%),如果通过分布式自适应计划生成的计划是下发语句的分布式计划,且该计划为非参数化路径计划,则系统将其回退至Stream计划。
- XC_REMOTE_JOIN_PARAM:控制内表为RemoteJoin算子时,支持外表传递参数给内表执行。
- MERGE_INTO_SHIP:控制MERGE INTO下推功能,MERGE INTO USING SELECT FROM dual表场景下,可下推至DN执行CN轻量化/FQS计划。
- SUBLINK_QUERY_SHIP:控制子链接FQS下推功能,在满足可下推条件时,允许把子链接下推至DN执行。
- ROWID_OPT:控制ROWID系统列谓词条件改写、ORDER BY语句改写、max/min优化、分布剪枝和分区剪枝是否生效。详情可见《开发指南》中“特性使用指导 > ROWID表 > 使用指导 > DML”章节内容。
- PREFER_UNIQUE_INDEX:控制唯一索引扫描路径优先规则是否生效。该参数与sql_beta_feature中no_unique_index_first存在兼容性,两者为或的关系,唯一索引扫描路径优先规则在sql_beta_feature中未设置no_unique_index_first或PREFER_UNIQUE_INDEX开启时生效。仅支持等值场景,规则优先级低于PREFER_LONGER_INDEX。
- PREFER_LONGER_INDEX:控制最长最左索引扫描路径优先规则是否生效。仅支持等值场景,规则优先级高于PREFER_UNIQUE_INDEX。
- PPI_COST_MODEL1:控制LOCAL索引参数化路径场景下代价的修正,避免参数化路径场景选择LOCAL索引且查询条件不包含分区键时,代价估计过小导致计划不优。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- PREDICATE_INFER_ENHANCE:控制谓词推导消减,简化谓词逻辑并提升查询性能。详情见参数cost_model_version的谓词推导消减描述。
- HIERARCHY_QRY_CHECK_SUBLINK_PULLUP:控制层次查询同层子链接提升的行为,当开启该参数时,将进行更严格的子链接提升检查。从不支持该参数的旧版本升级至当前版本场景下,该参数值保持默认关闭,且升级观察期该功能不生效。
- ACTUAL_RANGE_BY_INDEX:控制优化器在做范围条件选择性估算时,如果发现条件落在统计直方图的最左/最右端,是否直接通过索引查询真实的最大/最小值,避免统计过时导致估算偏差。
- FIX_PART_INDEX_SCAN_COST:控制分区表LOCAL索引扫描的代价修正,避免估算偏差导致计划不优。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- OPT_KNOB_20260703_1:控制优化器在使用多列统计信息计算NDV时,是否将NULL值比例计入。打开该开关,不将其计入,可以获得更准确的基数估计。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- OPT_KNOB_20260807_1:控制优化器估算分区表索引页面数的修正,避免估算偏差导致计划不优。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- OPT_KNOB_20260728_1:控制优化器agg代价模型,打开时使用超几何分布概率算法,关闭时使用等比例缩放算法,影响hashagg中agg行数估算,避免估算偏差导致计划不优。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- OPT_KNOB_20260812_1:控制优化器生成nestloop路径时,外表带sort算子场景的代价修正,避免估算偏差导致计划不优。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
默认值:
- 新安装的数据库默认值为:
'ALL,on(ROWID_OPT,DIST_QUERY_ADAPTIVE_FALLBACK,XC_REMOTE_JOIN_PARAM,MERGE_INTO_SHIP,SUBLINK_QUERY_SHIP,SUBPLAN_SORTED_PATH_FIX,PARAM_PATH_SKIP_CACHING_VARRATIO,PREFER_UNIQUE_INDEX,PREFER_LONGER_INDEX,PPI_COST_MODEL1,PREDICATE_INFER_ENHANCE,HIERARCHY_QRY_CHECK_SUBLINK_PULLUP,ACTUAL_RANGE_BY_INDEX,FIX_PART_INDEX_SCAN_COST,OPT_KNOB_20260703_1,OPT_KNOB_20260807_1,OPT_KNOB_20260728_1,OPT_KNOB_20260812_1),off()'。
- 参数PPI_COST_MODEL1、FIX_PART_INDEX_SCAN_COST、HIERARCHY_QRY_CHECK_SUBLINK_PULLUP、OPT_KNOB_20260703_1、OPT_KNOB_20260807_1、OPT_KNOB_20260728_1、OPT_KNOB_20260812_1行为说明:从不支持上述参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- 在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,不建议通过gs_guc工具来设置。设置方法如下:
首先,通过SHOW opt_behavior_knob来查看哪些行为变更是支持可控制的。例如,查询输出结果为:
1 2 3 4 5 | gaussdb=# SHOW opt_behavior_knob; opt_behavior_knob ------------------------------------------------ ALL,on(ROWID_OPT,DIST_QUERY_ADAPTIVE_FALLBACK,XC_REMOTE_JOIN_PARAM,MERGE_INTO_SHIP,SUBLINK_QUERY_SHIP,SUBPLAN_SORTED_PATH_FIX,PARAM_PATH_SKIP_CACHING_VARRATIO,PREFER_UNIQUE_INDEX,PREFER_LONGER_INDEX,PPI_COST_MODEL1,PREDICATE_INFER_ENHANCE,HIERARCHY_QRY_CHECK_SUBLINK_PULLUP,ACTUAL_RANGE_BY_INDEX,FIX_PART_INDEX_SCAN_COST,OPT_KNOB_20260703_1,OPT_KNOB_20260807_1,OPT_KNOB_20260728_1,OPT_KNOB_20260812_1),off() (1 row) |
支持可控制的行为变更使用大写来标识,特殊标识ALL用于对所有行为变更进行设置。可以使用on/off来控制行为变更是否生效。设置“参数化路径跳过缓存选择率”行为变更关闭,可使用如下命令:
1 2 3 4 5 6 | gaussdb=# SET opt_behavior_knob = 'off(PARAM_PATH_SKIP_CACHING_VARRATIO)'; gaussdb=# SHOW opt_behavior_knob; opt_behavior_knob ------------------------------------------------ ALL,on(ROWID_OPT,DIST_QUERY_ADAPTIVE_FALLBACK,XC_REMOTE_JOIN_PARAM,MERGE_INTO_SHIP,SUBLINK_QUERY_SHIP,SUBPLAN_SORTED_PATH_FIX,PREFER_UNIQUE_INDEX,PREFER_LONGER_INDEX,PPI_COST_MODEL1,PREDICATE_INFER_ENHANCE,HIERARCHY_QRY_CHECK_SUBLINK_PULLUP,ACTUAL_RANGE_BY_INDEX,FIX_PART_INDEX_SCAN_COST,OPT_KNOB_20260703_1,OPT_KNOB_20260807_1,OPT_KNOB_20260728_1,OPT_KNOB_20260812_1),off(PARAM_PATH_SKIP_CACHING_VARRATIO) (1 row) |
可以看到“参数化路径跳过缓存选择率”行为变更被关闭,其他行为变更保持原状态。
ALL标识相当于一个快捷操作,即对所有行为变更进行开启或关闭。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | gaussdb=# SET opt_behavior_knob = 'off(ALL)'; SET gaussdb=# SHOW opt_behavior_knob; opt_behavior_knob ------------------------------------------------ ALL,on(),off(ROWID_OPT,DIST_QUERY_ADAPTIVE_FALLBACK,XC_REMOTE_JOIN_PARAM,MERGE_INTO_SHIP,SUBLINK_QUERY_SHIP,SUBPLAN_SORTED_PATH_FIX,PARAM_PATH_SKIP_CACHING_VARRATIO,PREFER_UNIQUE_INDEX,PREFER_LONGER_INDEX,PPI_COST_MODEL1,PREDICATE_INFER_ENHANCE,HIERARCHY_QRY_CHECK_SUBLINK_PULLUP,ACTUAL_RANGE_BY_INDEX,FIX_PART_INDEX_SCAN_COST,OPT_KNOB_20260703_1,OPT_KNOB_20260807_1,OPT_KNOB_20260728_1,OPT_KNOB_20260812_1) (1 row) gaussdb=# SET opt_behavior_knob = 'on(ALL)'; SET gaussdb=# SHOW opt_behavior_knob; opt_behavior_knob ------------------------------------------------ ALL,on(ROWID_OPT,DIST_QUERY_ADAPTIVE_FALLBACK,XC_REMOTE_JOIN_PARAM,MERGE_INTO_SHIP,SUBLINK_QUERY_SHIP,SUBPLAN_SORTED_PATH_FIX,PARAM_PATH_SKIP_CACHING_VARRATIO,PREFER_UNIQUE_INDEX,PREFER_LONGER_INDEX,PPI_COST_MODEL1,PREDICATE_INFER_ENHANCE,HIERARCHY_QRY_CHECK_SUBLINK_PULLUP,ACTUAL_RANGE_BY_INDEX,FIX_PART_INDEX_SCAN_COST,OPT_KNOB_20260703_1,OPT_KNOB_20260807_1,OPT_KNOB_20260728_1,OPT_KNOB_20260812_1),off() (1 row) |
设置建议:推荐使用默认值,根据需要关闭指定行为变更。
设置不当的风险与影响:关闭某个或者所有行为变更时会导致优化器输出非预期计划,可能影响系统性能。
当cost_model_version>=5或为0且opt_behavior_knob指定行为变更为on时,相关功能才生效。
exec_behavior_knob
参数说明:用于控制执行器在特定场景下的行为变更。
参数类型:字符串
参数单位:无
取值范围:可由SHOW exec_behavior_knob查看参数值:
1 | ALL,on(SHOW_BATCH_ERROR_DETAIL,INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION),off(AUTO_INCR_LP_INSERT) |
- SHOW_BATCH_ERROR_DETAIL:batch批量执行场景下,如果在循环执行过程中抛出异常,则打印当前批次数目和报错批次中的绑参值。
- INDEXBY_FUNC_OPTIMIZE:在存储过程中调用带索引的集合类型变量的first/last/prior/next函数时,使用红黑树进行性能优化。开启后,为了维护红黑树,占用内存会增加,部分场景性能会劣化。
- SYS_CB_PATH_NULL_CTRL:控制层次查询系统函数SYS_CONNECT_BY_PATH执行时,如果读取到NULL值,是否进行特殊处理。开启后,对于NULL值会输出空;否则,输出“null”字符串。从不支持该参数的旧版本升级上来,观察期内开关默认为开启状态且参数不生效;观察期结束后,开关自动切换为关闭状态。
- AUTO_INCR_LP_INSERT:用于控制分区键为自增列的简单插入场景下,是否启用light proxy下推优化。关闭后,该场景下通过explain展示执行计划时,由light proxy变为pgxc,导致部分场景性能劣化。
- PGXC_MERGE_UPDATE:用于控制在PGXC计划下,单条SQL语句,执行MERGE INTO语法时,是否允许对同一行数据进行多次更新。如果开启该参数,且开启enable_cid_sync参数,则报错。
- SORT_KEYS_CACHE:用于控制是否启用Sort算子多列信息缓存机制以提升排序性能操作。开启时,可动态缓存排序键相关信息,从而提升行执行器排序性能。
Sort算子多列信息缓存使用限制如下:
- 仅支持全量排序
本特性针对行执行器高频交叉比对的全量排序场景进行优化。对于带有LIMIT子句的Top-N查询,由于采用堆排序(Heap Sort),其整体比对次数较少,额外缓存多列数据的性价比低,因此此类场景下该特性不生效。若带LIMIT子句的查询采用快速排序,则可启用本优化特性。例如,执行计划输出结果为:
gaussdb=# EXPLAIN ANALYZE SELECT * FROM test_sort ORDER BY 1 LIMIT 1; QUERY PLAN -------------------------------------------------------------------------------------------------------------------- [Parameterized] Limit (cost=46.03..46.03 rows=1 width=4) (actual time=0.098..0.098 rows=1 loops=1) -> Sort (cost=46.03..52.04 rows=1 width=4) (actual time=0.095..0.095 rows=1 loops=1) Sort Key: a Sort Method: top-N heapsort Memory: 25kB -> Seq Scan on test_sort (cost=0.00..34.02 rows=2402 width=4) (actual time=0.045..0.050 rows=10 loops=1) Total runtime: 0.397 ms (7 rows) gaussdb=# EXPLAIN ANALYZE SELECT * FROM test_sort ORDER BY 1 LIMIT 6; QUERY PLAN -------------------------------------------------------------------------------------------------------------------- [Parameterized] Limit (cost=77.08..77.09 rows=6 width=4) (actual time=0.132..0.137 rows=6 loops=1) -> Sort (cost=77.08..83.08 rows=6 width=4) (actual time=0.127..0.129 rows=6 loops=1) Sort Key: a Sort Method: quicksort Memory: 25kB -> Seq Scan on test_sort (cost=0.00..34.02 rows=2402 width=4) (actual time=0.060..0.070 rows=10 loops=1) Total runtime: 0.551 ms (7 rows) - 唯一键场景
在一个单数据节点(DN)上,如果排序键仅有一列,或者第一排序键的数据具备唯一性(只要实际数据唯一,不需要唯一性约束),说明不会发生二次比对。此时该特性不生效。
- 内存溢出保护
当原始排序数据所需内存已超出系统配置的工作内存(work_mem),需溢出磁盘处理时;或计入多列缓存带来的额外内存开销后,整体占用超出工作内存(work_mem)时,多列缓存特性将自动失效。
- 排序键数量限制
- 仅支持全量排序
- PLSQL_RETURN_EXCEPTION:用于控制ORA兼容模式下,存储过程RETURN语句类型转换报错能否被EXCEPTION语句捕获。详细可见错误捕获语句。
从不支持该参数选项的版本升级至当前版本时,升级观察期该参数设置不生效,升级提交后生效且升级提交后该选项默认为off。
默认值:
- 新安装的数据库默认值为:
'ALL,on(SHOW_BATCH_ERROR_DETAIL,INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION),off(AUTO_INCR_LP_INSERT)'。
- 该参数自507.0.0版本添加,从507.0.0之前的版本升级到当前版本,数据库默认值为:
'ALL,on(SHOW_BATCH_ERROR_DETAIL),off(INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,AUTO_INCR_LP_INSERT,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION)'。
- 507.0.0之后的版本升级到当前版本,原有行为变更保持与升级前版本一致,新增行为变更默认关闭。
设置方式:该参数属于USERSET类型参数,不建议通过gs_guc工具来设置。设置方法如下:
首先,通过SHOW exec_behavior_knob来查看哪些行为变更是支持可控制的。例如,查询输出结果为:
1 2 3 4 5 | gaussdb=# SHOW exec_behavior_knob; exec_behavior_knob --------------------------------------- ALL,on(SHOW_BATCH_ERROR_DETAIL,INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION),off(AUTO_INCR_LP_INSERT) (1 row) |
支持可控制的行为变更使用大写来标识,特殊标识ALL用于对所有行为变更进行设置。可以使用on/off来控制行为变更是否生效。设置SHOW_BATCH_ERROR_DETAIL行为变更关闭,可使用如下命令:
1 2 3 4 5 6 | gaussdb=# SET exec_behavior_knob='off(SHOW_BATCH_ERROR_DETAIL)'; gaussdb=# SHOW exec_behavior_knob; exec_behavior_knob --------------------------------------- ALL,on(INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION),off(SHOW_BATCH_ERROR_DETAIL,AUTO_INCR_LP_INSERT) (1 row) |
可以看到SHOW_BATCH_ERROR_DETAIL行为变更被关闭,其他行为变更保持原状态。
ALL标识相当于一个快捷操作,即对所有行为变更进行开启或关闭。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | gaussdb=# SET exec_behavior_knob='off(ALL)'; SET gaussdb=# SHOW exec_behavior_knob; exec_behavior_knob --------------------------------------- ALL,on(),off(SHOW_BATCH_ERROR_DETAIL,INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,AUTO_INCR_LP_INSERT,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION) (1 row) gaussdb=# SET exec_behavior_knob = 'on(ALL)'; SET gaussdb=# SHOW exec_behavior_knob; exec_behavior_knob --------------------------------------- ALL,on(SHOW_BATCH_ERROR_DETAIL,INDEXBY_FUNC_OPTIMIZE,SYS_CB_PATH_NULL_CTRL,AUTO_INCR_LP_INSERT,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION),off() (1 row) |
SHOW_BATCH_ERROR_DETAIL打开时,对于配置文件中未显式指定的参数选项将加载系统默认值。系统默认值中,默认打开的参数有SHOW_BATCH_ERROR_DETAIL和SYS_CB_PATH_NULL_CTRL。因此,可以看到SHOW_BATCH_ERROR_DETAIL行为变更被打开时,SYS_CB_PATH_NULL_CTRL参数为打开,INDEXBY_FUNC_OPTIMIZE、AUTO_INCR_LP_INSERT、PGXC_MERGE_UPDATE、PLSQL_RETURN_EXCEPTION参数为关闭。
1 2 3 4 5 6 | gs_guc reload -Z datanode -N all -I all -c "exec_behavior_knob='on(SHOW_BATCH_ERROR_DETAIL)'" gaussdb=# SHOW exec_behavior_knob; exec_behavior_knob --------------------------------------- ALL,on(SHOW_BATCH_ERROR_DETAIL,SYS_CB_PATH_NULL_CTRL),off(INDEXBY_FUNC_OPTIMIZE,AUTO_INCR_LP_INSERT,PGXC_MERGE_UPDATE,SORT_KEYS_CACHE,PLSQL_RETURN_EXCEPTION) (1 row) |
设置建议:
- SORT_KEYS_CACHE:请结合当前业务系统配置的work_mem和数据分布进行设置。
开启多列缓存会按比例增加Sort算子的内存占用。增加的内存大小与数据行数及额外缓存的列数呈严格的线性关系,通过以下公式进行评估:
额外内存增量 ≈ 总行数 * 10 * (总排序键个数 - 1) 字节
(注:10为单列缓存预估的字节开销基数)
- 建议开启场景:
前导列重复度高:当ORDER BY中靠前的排序列(前导列)包含大量重复值(如状态、部门等低基数字段)时,数据重复度越高,该特性的多列比对优化效果越显著。
后续列物理位置靠后:当用于二次比对的后续排序列在表结构中的位置较靠后(即列下标较大)时。列下标越大,该特性的优化收益就越明显。
- 建议关闭场景:
内存资源紧张:当系统配置的work_mem较小,或者数据库整体内存资源较为紧张时,不建议开启。
- 建议开启场景:
- 其它:推荐使用默认值。
设置不当的风险与影响:关闭某个或者所有选项会引起对应选项的行为变更。
enable_cid_sync
参数说明:当开启此功能时,在执行顶层分布式PGXC计划时,下发DN的非只读语句会同步使用CN上的CID,保证本事务内修改元组的可见性。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启此功能。
- off:表示关闭此功能。
默认值:
- 新安装的数据库:on。
- 从历史版本升级上来的数据库:若历史版本不支持该GUC参数,升级后的默认值为off;若历史版本支持该GUC参数,升级后默认值保留原设置。
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若关闭该开关,在分布式PGXC计划涉及一行SQL下发多个语句的场景下,可能会影响本事务内修改元组的可见性。
enable_startwith_prior_enhance
参数说明:该参数标识是否增强对PRIOR修饰列的控制。若打开该参数,在带有CONNECT BY子句的SELECT语句中,支持在SELECT查询列、DISTINCT子句、WHERE子句、GROUP BY子句、HAVING子句、WINDOW子句、ORDER BY子句使用PRIOR关键字修饰列,显示父行列值。同时,在下述三个场景下,会报错:
(1)在带有CONNECT BY子句的SELECT语句中,ON条件、ORDER SIBLINGS BY子句使用PRIOR修饰列。
(2)在不带有CONNECT BY子句的语句中,使用PRIOR修饰列。
(3)在支持子句(SELECT查询列、DISTINCT子句、WHERE子句、GROUP BY子句、HAVING子句、WINDOW子句、ORDER BY子句)中,使用PRIOR修饰伪列LEVEL、CONNECT_BY_ISCYCLE、CONNECT_BY_ISLEAF。
若关闭该参数,在CONNECT BY子句外使用PRIOR关键字修饰列等同于不添加PRIOR关键字,会显示当前行列值。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,在恢复前向兼容行为时关闭。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
ustore_consistent_read_opt
参数说明:控制Ustore顺序扫描一致性读策略。
参数类型:枚举类型
参数单位:无
取值范围:
- pbrcr:基于页面的行一致性读策略。
- fast_pbrcr: 优化了页面持锁逻辑和Undo遍历算法的基于页面的行一致性读策略。
默认值:pbrcr
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
parser_ignore_hints
参数说明:控制是否禁用对HINT的解析。
参数类型:布尔类型
参数单位:无
取值范围:
- on:在解析阶段禁用了对HINT的处理,使语句中的HINT不生效。该参数打开时影响SQL Patch的生效,不影响Outline与SPM Baseline。
- off: 在解析阶段正常对HINT处理。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:开启该参数后,可能导致经HINT或SQL Patch调优的语句回退到差的查询计划,从而导致性能劣化。
enable_partition_statistics_min_rows
参数说明:对分区表执行partition_mode为ALL的ANALYZE操作时,是否使用分区表上设置的partition_statistics_min_rows选项。
参数类型:布尔类型
参数单位:无
取值范围:
- on:可使用分区表上指定的partition_statistics_min_rows值作为非空分区采样的最小采样行数。
- off:不使用分区表上指定的partition_statistics_min_rows值来控制非空分区采样的最小行数。
默认值:
- 新安装的数据库:on。
- 从历史版本升级上来的数据库:若历史版本不支持该GUC参数,升级后默认值为off;若历史版本支持该GUC参数,升级后默认值保留原设置。
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:关闭该参数后,可能导致partition_mode为ALL的ANALYZE操作,得到的分区级统计信息不够准确。具体行为可参考ANALYZE | ANALYSE章节。