更新时间:2024-11-12 GMT+08:00
分享

其他优化器选项

cost_model_version

参数说明此参数用来指定优化器代价模型的版本。可以视作一个保护参数,用来禁用最新的优化器代价模型,保持和旧版本计划一致。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围0、1、2、3、4、5

  • 0:表示使用最新的cost估算模型。当前版本等价于5。
  • 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参数单独控制。

默认值0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:数据库升级时,建议和升级前版本保持一致;新安装环境时,建议设置为默认值。

设置不当的风险与影响:改变此参数,可能会导致很多SQL计划的改变,因此修改前请谨慎评估。

enable_csqual_pushdown

参数说明设置进行查询时,是否要将过滤条件下推,进行Rough Check。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示进行查询时,将过滤条件下推,进行Rough Check。
  • off:表示进行查询时,不将过滤条件下推,进行Rough Check。

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:如果查询涉及大量数据的过滤,关闭过滤条件下推可能会带来性能上的下降。

explain_dna_file

参数说明:指定explain_perf_mode为run时,指定导出的目标文件。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:绝对路径加上.csv格式的文件名。

默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,如有需要根据业务场景进行设置。

设置不当的风险与影响:可能会带来文件写入的开销。

explain_perf_mode

参数说明此参数用来指定explain的显示格式。该参数可在PDB级别设置。

参数类型:枚举类型

参数单位:

取值范围normal、pretty、summary、run

  • normal:代表使用默认的打印格式。
  • pretty:代表使用GaussDB改进后的新显示格式。新的格式层次清晰,计划包含了plan node id,性能分析简单直接。
  • summary:是在pretty的基础上增加了对打印信息的分析。
  • run:在summary的基础上,将统计的信息输出到csv格式的文件中,以便于进一步分析。
  • explain的显示格式取不同值时,展示顺序可能存在较大的差异。normal格式和pretty格式显示样例说明如下:

    normal格式:

                                                                                     QUERY PLAN
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     Sort  (cost=21.23..21.23 rows=1 width=306)
       Sort Key: supplier.s_suppkey
       CTE revenue
         ->  HashAggregate  (cost=12.88..12.88 rows=1 width=76)
               Group By Key: lineitem.l_suppkey
               ->  Partition Iterator  (cost=0.00..12.87 rows=1 width=44)
                     Iterations: 7
                     ->  Partitioned Seq Scan on lineitem  (cost=0.00..12.87 rows=1 width=44)
                           Filter: ((l_shipdate >= '1996-01-01 00:00:00'::timestamp(0) without time zone) AND (l_shipdate < '1996-04-01 00:00:00'::timestamp without time zone))
                           Selected Partitions:  1..7
       InitPlan 2 (returns $3)
         ->  Aggregate  (cost=0.02..0.03 rows=1 width=64)
               ->  CTE Scan on revenue  (cost=0.00..0.02 rows=1 width=32)
       ->  Nested Loop  (cost=0.00..8.30 rows=1 width=306)
             ->  CTE Scan on revenue  (cost=0.00..0.02 rows=1 width=40)
                   Filter: (total_revenue = $3)
             ->  Partition Iterator  (cost=0.00..8.27 rows=1 width=274)
                   Iterations: 7
                   ->  Partitioned Index Scan using supplier_s_suppkey_idx on supplier  (cost=0.00..8.27 rows=1 width=274)
                         Index Cond: (s_suppkey = revenue.supplier_no)
                         Selected Partitions:  1..7
    (21 rows)

    pretty格式:

     id |                                  operation                                   | E-rows | E-width |    E-costs
    ----+------------------------------------------------------------------------------+--------+---------+----------------
      1 | ->  Sort                                                                     |      1 |     306 | 21.230..21.235
      2 |    ->  Nested Loop (3,9)                                                     |      1 |     306 | 0.000..8.303
      3 |       ->  CTE Scan on revenue                                                |      1 |      40 | 0.000..0.022
      4 |    ->  HashAggregate  [3, CTE revenue]                                       |      1 |      76 | 12.875..12.885
      5 |       ->  Partition Iterator                                                 |      1 |      44 | 0.000..12.865
      6 |          ->  Partitioned Seq Scan on lineitem                                |      1 |      44 | 0.000..12.865
      7 |    ->  Aggregate  [4, InitPlan 2 (returns $3)]                               |      1 |      64 | 0.022..0.033
      8 |       ->  CTE Scan on revenue                                                |      1 |      32 | 0.000..0.020
      9 |       ->  Partition Iterator                                                 |      1 |     274 | 0.000..8.270
     10 |          ->  Partitioned Index Scan using supplier_s_suppkey_idx on supplier |      1 |     274 | 0.000..8.270
    (10 rows)
    
                                                             Predicate Information (identified by plan id)
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------
       5 --Partition Iterator
             Iterations: 7
       6 --Partitioned Seq Scan on lineitem
             Filter: ((l_shipdate >= '1996-01-01 00:00:00'::timestamp(0) without time zone) AND (l_shipdate < '1996-04-01 00:00:00'::timestamp without time zone))
             Selected Partitions:  1..7
       3 --CTE Scan on revenue
             Filter: (total_revenue = $3)
       9 --Partition Iterator
             Iterations: 7
      10 --Partitioned Index Scan using supplier_s_suppkey_idx on supplier
             Index Cond: (s_suppkey = revenue.supplier_no)
             Selected Partitions:  1..7
    (12 rows)

    说明:上述两种格式的计划块是同一计划的不同展示形式,在pretty格式下,加粗部分是CET和InitPlan计划块,它们可能穿插在Join连接块中间,阅读Join连接块时候遇到CTE、InitPlan块时候跳过即可找到对应的Join块的内表。

  • 由于pretty格式只展示一个计划,当使用CREATE RULE创建规则后执行的SQL语句可能会产生多个计划,建议使用normal格式。用例如下:
    gaussdb=# CREATE TABLE another_table (id int, name text);
    CREATE TABLE
    gaussdb=# CREATE TABLE my_table (id int, name text);
    CREATE TABLE
    gaussdb=# CREATE RULE my_rule AS ON INSERT TO my_table 
    gaussdb-# WHERE NEW.id > 5
    gaussdb-# DO INSTEAD (INSERT INTO another_table VALUES (NEW.id, 'Some Data'););
    CREATE RULE
    gaussdb=# EXPLAIN INSERT INTO my_table VALUES (5, 'Test Name');
                            QUERY PLAN                         
    -----------------------------------------------------------
     Insert on my_table  (cost=0.00..0.01 rows=1 width=0)
       ->  Result  (cost=0.00..0.01 rows=1 width=0)
    
     Insert on another_table  (cost=0.00..0.01 rows=1 width=0)
       ->  Result  (cost=0.00..0.01 rows=1 width=0)
             One-Time Filter: false
    (6 rows)
    
    gaussdb=# SET explain_perf_mode=pretty;
    SET
    gaussdb=# EXPLAIN INSERT INTO my_table VALUES (5, 'Test Name');
     id |          operation          | E-rows | E-width |   E-costs    
    ----+-----------------------------+--------+---------+--------------
      1 | ->  Insert on another_table |      1 |       0 | 0.000..0.010
      2 |    ->  Result               |      1 |       0 | 0.000..0.010
    (2 rows)
    
     Predicate Information (identified by plan id) 
    -----------------------------------------------
       2 --Result
             One-Time Filter: false
    (2 rows)
    
    gaussdb=# DROP TABLE my_table;
    DROP TABLE
    gaussdb=# DROP TABLE another_table;
    DROP TABLE

默认值pretty。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,如有需要可另行设置。

设置不当的风险与影响:不同格式会影响explain提供的信息量。

analysis_options

参数说明:通过开启对应选项使用相应的定位功能,包括数据校验、性能统计等,具体参见取值范围中的描述。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:

该参数每次设置将会通过集合操作的方式对当前值做修改:

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:表示在数据库节点进程的gs_log目录的log日志中显示hash表的统计信息,包括hash表大小、hash链长、hash冲突情况。
  • STREAM_DATA_CHECK:表示对网络传输前后的数据进行CRC校验。

默认值:off(ALL),不开启任何定位功能。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:如需手动设置,需要明确预期显示的结果是否符合需求。

cost_param

参数说明该参数用于控制在特定的客户场景中,使用不同的估算方法,使得代价模型估算更准确。通过将参数修改为不同的值,选择开启不同的方法。此参数可以同时控制多种方法,每一种方法由不同的数字编号控制,参数取值与方法对应的数字编号做“与”操作的结果不为0时,表示该方法开启。该参数可在PDB级别设置。

  • 当cost_param & 1不为0,表示对于求不等值连接选择率时选择一种改良机制,此方法在自连接(两个相同的表之间连接)的估算中更加准确。当前版本已弃用cost_param & 1 不为0时的路径,默认选择更优的估算公式。
  • 当cost_param & 2不为0,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确。

参数类型:整型

参数单位:

取值范围0 ~ 2147483647

默认值0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:在明确需要调整选择率的场景后,设置对应参数值。

设置不当的风险与影响:设置不当可能会导致最终的代价估算不符合预期,建议在充分测试后确认应当设置的参数值。

var_eq_const_selectivity

参数说明整型const选择率是否使用新型选择率模型进行估算。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示使用新型选择率模型计算整型const的选择率。
    • 当整型不落入MCV且不为NULL值时,若落入直方图,则利用直方图左右边界情况进行估算;若不落入直方图,则使用表的行数进行估算。
    • 当整型为NULL值或者MCV值时,使用原逻辑计算选择率。
  • off:表示使用原有的选择率计算模型。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,若启用该参数,建议充分测试评估相应场景是否能带来性能提升。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_partitionwise

参数说明分区表连接操作是否选择智能算法。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示选择智能算法。
  • off:表示不选择智能算法。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:打开前确认是否开启SMP,否则可能影响非SMP场景下分区表Join操作的性能。

enable_partition_pseudo_predicate

参数说明在指定分区查询场景下,是否使用伪谓词改写的方式计算指定分区查询的选择率。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示使用伪谓词改写。
  • off:表示不使用伪谓词改写。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,若启用该参数,建议充分测试评估相应场景是否能带来性能提升。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

partition_page_estimation

参数说明分区表页面是否通过剪枝结果进行页面估算优化。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示使用剪枝结果进行页面估算优化。
  • off:表示不使用剪枝结果进行页面估算优化。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,若启用该参数,建议充分测试评估相应场景是否能带来性能提升。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

partition_iterator_elimination

参数说明分区表在分区剪枝结果为一个分区时,是否消除分区迭代算子来提升执行效率。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示消除分区迭代算子。
  • off:表示不消除分区迭代算子。

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭可能会导致查询性能下降。

enable_functional_dependency

参数说明ANALYZE生成的多列统计信息是否包含函数依赖统计信息,是否应用函数依赖统计信息计算选择率。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示执行ANALYZE生成的多列统计信息包含函数依赖统计信息,并且计算选择率会使用函数依赖统计信息。
  • off:表示执行ANALYZE生成的多列统计信息不包含函数依赖统计信息,并且计算选择率不会使用函数依赖统计信息。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,若启用该参数,建议充分测试评估相应场景是否能带来性能提升。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

rewrite_rule

参数说明标识开启的可选查询重写规则。有部分查询重写规则是可选的,开启它们并不能总是对查询效率有提升效果。在特定的客户场景中,通过此GUC参数对查询重写规则进行设置,使得查询效率最优。该参数可在PDB级别设置。

此参数可以控制查询重写规则的组合。比如有多个重写规则: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查询重写规则(将带有聚集算子的子查询提前和主查询进行关联,减少子链接的重复扫描)。
  • uniquecheck:使用Unique Check查询重写规则(提升目标列中无agg的子查询语句,在执行时检查返回行数是否为1行)。
  • intargetlist:使用In Target List查询重写规则(提升目标列中的子查询)。
  • predpushnormal:使用Predicate Push查询重写规则(下推谓词条件到子查询中)。
  • predpushforce:使用Predicate Push查询重写规则(下推谓词条件到子查询中,尽可能的利用索引加速)。
  • predpush:在predpushnormal和predpushforce中根据代价选择最优计划。
  • 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伪列的情况下优化器进行子连接提升。

默认值magicset, groupby_pushdown_subquery。在PDB场景内,若未设置该参数,则继承来自全局的设置。

当前版本可以设置partialpush、disablerep参数,但实际不生效。

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

设置建议:推荐使用默认值。如有其他改写必要,建议明确查询改写场景后,仅打开对应重写规则。

设置不当的风险与影响:可能会导致某些场景改写的语句代价并非最优,建议充分测试后使用对应规则。

costbased_rewrite_rule

参数说明该参数用于标识对指定的查询改写规则开启基于代价的评估策略。部分查询改写规则支持基于代价评估是否对SQL进行改写,从而使内核生成更好的查询计划,提升SQL执行效率。多租场景下,该参数可在PDB级别设置。

该参数与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选项功能不生效。

默认值intargetlist, pullup_expr_sublink, pullup_not_in_sublink,enable_sublink_pullup_enhanced。在PDB场景内,若未设置该参数,则继承来自全局的设置。

相关参数使用场景案例可参考《开发指南》的“SQL调优指南 > 实际调优案例 > 案例:调整基于代价的查询重写GUC参数costbased_rewrite_rule”章节。

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

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

对于简单子查询展开(受pullup_subquery参数控制)、ANY非相关子链接和[NOT] EXISTS相关子链接(受pullup_sublink_any_exists参数控制)通常按默认规则进行改写生成执行计划更优,因为开启代价改写策略会带来一些性能开销,因此对于此类规则不建议开启基于代价的改写策略。

设置不当的风险与影响:关闭该参数相关改写规则将退化为基于规则进行改写,缺少代价评估可能导致部分场景下生成的计划较差,影响查询性能。

costbased_rewrite_rule_max_iterations

参数说明执行的SQL在计划生成阶段时,如果对同一规则中满足做代价评估的条件数超过该参数的取值,则对本次请求中超过阈值的条件关闭基于代价的评估策略,转化为基于规则的改写策略。当查询改写阶段开启基于代价的评估策略后该参数生效。多租场景下,该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围0 ~ 1000

默认值10。在PDB场景内,若未设置该参数,则继承来自全局的设置。

  • 该参数受GUC参数costbased_rewrite_rule影响,当costbased_rewrite_rule值不为none时,该参数生效。
  • 如果设置该参数值为0,表示对当前SQL关闭基于代价的改写策略。

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

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

设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大或过小时都可能带来额外的性能开销,影响最终的查询性能。

costbased_rewrite_rule_timeout

参数说明执行的SQL在计划生成阶段时,如果使用各规则做代价评估的整体时间超过该参数设置的超时时间,则对本次请求后续流程关闭基于代价的评估策略,转化为基于规则的改写策略。当查询改写阶段开启基于代价的评估策略后该参数生效。多租场景下,该参数可在PDB级别设置。

参数类型:整型

参数单位:毫秒(ms)

取值范围-1 ~ 300,000

默认值-1。在PDB场景内,若未设置该参数,则继承来自全局的设置。

  • 该参数受GUC参数costbased_rewrite_rule影响,当costbased_rewrite_rule值不为none时,该参数生效。
  • 如果设置该参数值为0,表示对当前SQL关闭基于代价的改写策略。
  • 如果设置该参数值为-1,表示对当前SQL关闭超时时间控制。

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

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

设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大或过小时都可能带来额外的性能开销,影响最终的查询性能。

enable_pbe_optimization

参数说明设置优化器是否对以PBE(Parse Bind Execute)形式执行的语句进行查询计划的优化,优化原理是使FQS选择gplan计划。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示优化器将优化PBE语句的查询计划,在FQS下选择gplan。
  • off:表示不使用优化。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在不希望FQS选择gplan时可设置为off。

设置不当的风险与影响:关闭可能会导致某些场景走cplan。

enable_global_plancache

参数说明设置是否对PBE查询和存储过程中语句的执行计划进行缓存共享,开启该功能可以节省高并发下数据库节点的内存使用。多租数据库特性(enable_mtd)需要关闭该参数。

在打开enable_global_plancache的情况下,为保证GPC生效,默认local_syscache_threshold不小于16MB。即如果当前local_syscache_threshold小于16MB,则设置为16MB,如大于16MB,则不改变。

参数类型:布尔型

参数单位:

取值范围

  • on:表示对PBE查询和存储过程中语句的执行计划进行缓存共享。
  • off:表示不共享。

默认值off

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

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

设置不当的风险与影响:关闭会导致对应计划缓存不共享,资源占用增加。

gpc_clean_timeout

参数说明本参数用于控制不使用的共享计划的保留时间。在开启enable_global_plancache的情况下,如果共享计划列表里的计划超过gpc_clean_timeout的时间没有被使用,则会被清理掉。

参数类型:整型

参数单位:秒(s)

取值范围300 ~ 86400

默认值1800(即30min)

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。例如,设置为300,不带单位,表示300s;设置为30min,带单位,表示30min。取值如果要带单位,必须为s、min、h、d。

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

设置不当的风险与影响:设置过大可能导致GPC占用内存过多,建议充分测试后设置合理值。

enable_opfusion

参数说明控制是否对简单增删改查进行优化。该参数可在PDB级别设置。

简单查询限制如下:

  • 只支持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。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭有可能带来查询性能劣化。

enable_plsql_opfusion

参数说明如果开启该参数,可以对存储过程中的简单增删改查语句进行优化,提升SQL执行性能。多租场景下,该参数可在PDB级别设置。

简单增删改查语句的限制请参见enable_opfusion中相关说明。

仅在enable_opfusion参数打开的状态下生效。

参数类型布尔型

参数单位

取值范围

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

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭该参数可能会带来查询性能的劣化。

sql_beta_feature

参数说明标识开启的可选SQL引擎Beta特性,其中包括对行数估算、查询等价估算等优化。开启它们可以对特定的场景进行优化,但也可能会导致部分没有被测试覆盖的场景发生性能劣化。在特定的客户场景中,通过此GUC参数对查询重写规则进行设置,使得查询效率最优。该参数可在PDB级别设置。

此参数可以控制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:估算索引代价时考虑索引叶子节点。
  • a_style_coerce:开启Decode类型转换规则兼容A,具体请参见《开发指南》的“SQL参考 > 类型转换 > UNION,CASE和相关构造”章节中的“对于case,在A兼容模式下的处理”部分内容。
  • partition_fdw_on:支持基于分区表创建GaussDB foreign table下的相关SQL。
  • predpush_same_level:开启predpush hint控制同层参数化路径的功能。
  • enable_plsql_smp:开启存储过程中的查询支持并行执行的功能。目前在同一时刻仅支持一条query使用并行执行,且自治事务、exception中的查询不会生成并行执行计划。
  • 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_merge_append_partition:对于分区表,禁止生成Merge Append路径。
  • disable_fastpath_insert:对于分区表,禁止执行器对插入操作进行优化。
  • disable_text_expr_flatten:关闭text和数值类型(numeric, bigint)进行比较运算时自动内联表达式的功能。

默认值none。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值。该参数控制多种查询优化和兼容性行为,部分选项设置存在风险,建议谨慎使用。若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。

设置不当的风险与影响:需充分测试,否则可能产生意料之外的风险。

default_statistics_target

参数说明为没有用ALTER TABLE SET STATISTICS设置字段目标的表设置缺省统计目标。此参数仅影响统计信息的目标采样行数,实际采样行数还会受到内存参数maintenance_work_mem的限制。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围-100 ~ 10000

  • 此参数设置为正数时,代表统计信息直方图预期桶的数量,统计信息采样行数为default_statistics_target * 300。
  • 此参数设置为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%,采样行数为总行数 * 5%。

默认值100。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置建议:推荐使用默认值。在调整此参数之前,应根据具体的工作负载和查询模式进行综合评估。对于数据特征分布不均匀或数据量大的表,可能需要手动调整该参数值。

设置不当的风险与影响:

  • 如果default_statistics_target设置得过高,可能会增加ANALYZE操作的时间和资源消耗,因为需要收集更多的样本数据来生成统计信息。这可能导致数据库维护的开销增大,特别是在大型表上。
  • 如果default_statistics_target设置得过低,可能会降低统计信息的准确性,从而影响查询优化器生成高效查询计划的能力,导致查询性能下降。

auto_statistic_ext_columns

参数说明表示会根据数据表上的组合索引的前auto_statistic_ext_columns列,收集多列统计信息。例如:某组合索引为(a,b,c,d,e),此GUC参数设为3,则会在组合列(a,b)、(a,b,c)上产生多列统计信息。多列统计信息可以在组合条件查询时,使优化器更准确地估计基数。该参数可在PDB级别设置。

  • 系统表不会生效。
  • 组合列中的所有列的类型,都支持比较函数'='和'<',统计信息才会生效。
  • 索引中的系统伪列,如tableoid、ctid不会被收集。
  • 默认会收集distinct值、不带NULL的高频值、带NULL的高频值。如果开启了智能基数估计参数enable_ai_stats,则不会收集高频值,而是收集智能基数估计的模型。
  • 如果创建某多列统计信息的索引被删除,并且没有其它索引包含该多列组合,在下一次 analyze 的时候,该多列统计信息会被删除。
  • 如果该参数由大变小,新的索引会依据该参数产生多列统计信息,而已经产生的超过该参数长度的多列统计信息,不会被删除。
  • 如果用户希望禁用某一特定组合的多列统计信息,又希望使用其它多列统计信息,可以不修改该参数,而使用DDL命令'ALTER TABLE tablename disable statistics ((column list))'的方式,禁用特定的多列组合。

参数类型:整型

参数单位:

取值范围1 ~ 4。1表示不会自动收集多列统计信息。

默认值1。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值。在调整该参数值时,可考虑以下因素:

  • 表的大小和数据特性,例如多列相关性。
  • 查询模式,特别是查询中涉及的列和索引。
  • 系统可用的资源,例如CPU、内存和存储空间。

设置不当的风险与影响:

  • 设置的值过高可能会使得ANALYZE操作变得频繁,增加了数据库的维护开销,尤其是在大型表上。
  • 如果设置的值过低,可能无法充分捕捉到表中列之间的相关性,导致查询优化器不能生成最优的查询计划。

constraint_exclusion

参数说明控制查询优化器使用表约束查询的优化。该参数可在PDB级别设置。

参数类型:枚举类型

参数单位:

取值范围

  • on:表示检查所有表的约束。
  • off:表示不检查约束。
  • partition:表示只检查继承的子表和UNION ALL子查询。

默认值partition。在PDB场景内,若未设置该参数,则继承来自全局的设置。

  • 当constraint_exclusion为on时,优化器用查询条件和表的CHECK约束比较,并且在查询条件和约束冲突的时候忽略对表的扫描。
  • 目前,constraint_exclusion默认被打开,通常用来实现表分区。为所有的表打开该参数时,对于简单的查询强加了额外的规划,并且对简单查询没有什么好处。如果不用分区表,可以关掉该参数。

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

设置建议:推荐使用默认值。如果业务查询中经常使用到表的约束,并且这些约束有助于优化查询,则保持该参数开启可能是有益的。反之,如果这些约束对于查询优化没有太大帮助,关闭该参数可能更有利于性能。

设置不当的风险与影响:设置不当可能会影响查询性能。

cursor_tuple_fraction

参数说明优化器估计游标获取行数在总行数中的占比。该参数可在PDB级别设置。

参数类型:浮点型

参数单位:

取值范围0 ~ 1

默认值0.1。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置建议:推荐使用默认值,如果实际应用中游标操作经常访问表中的大部分行,可以适当增加此参数的值。

设置不当的风险与影响:设置不当可能导致查询性能下降。

from_collapse_limit

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

参数类型:整型

参数单位:

取值范围1 ~ 2147483647

默认值8。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置建议:推荐使用默认值,如果查询中经常需要处理多个子查询,并且这些子查询可以有效地合并以提高查询性能,可以考虑增大此参数的值。反之,如果合并子查询导致性能下降或增加了优化器生成执行计划的时间,可以考虑减小该值。

设置不当的风险与影响:设置不当可能会导致查询性能下降。

join_collapse_limit

参数说明根据得出的列表项数,来判断优化器是否把除FULL JOINS之外的JOIN构造重写到FROM列表中。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围1 ~ 2147483647

默认值8。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置建议:推荐使用默认值。降低参数值减少了规划时间,但可能降低计划生成质量;提高参数值增加了规划时间,但有可能生成更优计划。

设置不当的风险与影响:规划时间与计划生成质量的权衡,设置不当可能导致其中一方效果难以接受。

plan_mode_seed

参数说明该参数为调测参数,目前仅支持OPTIMIZE_PLAN和RANDOM_PLAN两种。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围-1 ~ 2147483647

  • 0:表示OPTIMIZE_PLAN模式,即通过动态规划算法进行代价估算生成最优plan。
  • -1:表示RANDOM_PLAN模式,即随机生成plan,且用户不指定生成随机数的种子标识符seed值,由优化器随机生成[1, 2147483647]范围内的整数值,并根据随机数生成随机的执行计划。
  • [1, 2147483647]范围内的整数值:表示RANDOM_PLAN模式,即随机生成plan,且用户指定的生成随机数的种子标识符seed值,优化器根据seed值生成随机的执行计划。

默认值0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

  • 当该参数不为0时,查询指定的plan hint不会生效。

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

设置建议:当该参数设置为RANDOM_PLAN模式时,优化器会随机生成执行计划,该执行计划可能不是最优计划,从而对查询性能产生影响。所以,在升级、扩容、缩容等正常业务操作或运维过程中,建议将该参数设置为0。

设置不当的风险与影响:设置不当可能导致查询性能下降。

hashagg_table_size

参数说明用于设置执行HASH JOIN操作时HASH表的大小。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围0 ~ 1073741823,其中0表示数据库将根据需要自动调整HASH表的大小。

默认值0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值。在实际应用中,如果遇到特定的查询场景,比如处理大量数据的聚合操作,可能需要手动调整此参数以优化性能。

设置不当的风险与影响:增加HASH表的大小可以减少HASH AGG操作中的磁盘I/O,因为更多的数据可以保留在内存中。然而,如果HASH表大小设置过大,可能会占用过多内存,导致内存不足。如果设置过小,可能无法有效地利用内存,导致更多的磁盘I/O操作,从而降低查询速度。

enable_codegen

参数说明:标识是否允许开启代码生成优化,目前代码生成使用的是LLVM优化。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

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

默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:若关闭该参数,则无法在重表达式查询场景获得codegen带来的性能提升。

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。

设置建议:推荐使用默认值,当系统视图gs_total_memory_detail中llvm_used_memory项到达默认值上限且业务的性能瓶颈在表达式执行流程时再做修改。

设置不当的风险与影响:

  • 最大占用内存如果设置过小,则易使系统不再使用Codegen执行逻辑,影响功能使用。
  • 最大占用内存如果设置过大,可能会造成LLVM的编译过多占用其他线程的资源,造成系统整体性能下降。

enable_codegen_print

参数说明:标识是否允许在log日志中打印所生成的LLVM IR函数。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

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

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在问题定位时再开启。

设置不当的风险与影响:若开启则会产生大量的log日志,占用磁盘I/O,使数据库系统前台查询的读写性能下降。

codegen_cost_threshold

参数说明:由于LLVM编译生成最终的可执行机器码需要一定时间,因此只有当实际执行的代价大于编译生成机器码所需要的代价和优化后的执行代价之和时,利用代码生成才有收益。codegen_cost_threshold标识代价的阈值,当执行估算代价大于该代价时,使用LLVM优化。codegen使用执行算子的plan_rows作为代价与codegen_cost_threshold进行比较,plan_rows的值可以通过explain命令查看。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:0 ~ 2147483647

默认值:100000。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在需要调整codegen机制的触发阈值时再做修改。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_bloom_filter

参数说明:标识是否允许使用BloomFilter优化。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

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

默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置不当的风险与影响:数据量较小时,使用BloomFilter优化可能会带来性能下降。

bloom_filter_build_max_rows

参数说明:启用BloomFilter优化时,Hashjoin的Build侧可以创建BloomFilter的最大数据量。如果build侧的数据量高于这个值,则不会建立BloomFilter。多租场景下,该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:1 ~ 2147483647

默认值:2000000。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。该参数仅在另一个参数enable_bloom_filter打开的情况下生效。

设置建议:在存储与计算资源充足的情况下,可以适当调大此值以获得更佳性能。

设置不当的风险与影响:当存储与计算资源不足,query_dop较高(>16)并且该值设定过大(>2000000)的情况下,有可能引起系统性能下降。

bloom_filter_apply_threshold

参数说明:启用BloomFilter优化时,Hashjoin的Apply侧可以创建BloomFilter的最小数据量。如果apply侧的数据量低于这个值,则不会建立BloomFilter。多租场景下,该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:1 ~ 2147483647

默认值:10000。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。该参数仅在另一个参数enable_bloom_filter打开的情况下生效。

设置建议:建议设置为1000-20000之间的整数。

设置不当的风险与影响:该值设置过大时(>20000),会使得丢失添加BloomFilter后可以优化性能的场景。该值设置过小时(<1000),会使得对数据规模较小的查询也进行BloomFilter的添加,反而引起性能劣化。

scan_wait_for_bloom_filter

参数说明:扫描算子是否等待BloomFilter创建完成。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示算子必须等待BloomFilter创建完成再开始扫描。
  • off:表示算子无须等待BloomFilter创建完成即可开始扫描。待BloomFilter创建完成后,若扫描还未完成,会在下一个扫描的batch中开始使用BloomFilter。

默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。该参数仅在另一个参数enable_bloom_filter打开的情况下生效。

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

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_extrapolation_stats

参数说明:对于日期类型,标识是否允许基于历史统计信息使用推理估算的逻辑。若使用该逻辑,对于未及时收集统计信息的表,可以提高估算的准确性,但也存在推理错误导致估算过大的可能。在日期类型数据定期插入的场景下,需要开启此开关。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

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

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值。在启用enable_extrapolation_stats之前,应该评估数据的变化频率和查询模式。如果数据变化很快,而且查询优化器经常需要处理不完整的统计信息,启用这个参数可能会有所帮助。在正式启用之前,应该在测试环境中进行充分的测试,以确定启用外推统计信息对性能的具体影响。启用外推统计信息后,应密切监控查询性能和数据库的统计信息准确性,确保没有引入性能问题或导致统计信息的准确性大幅下降。

设置不当的风险与影响:打开后可能会存在推理错误导致查询性能下降的可能。

query_dop

参数说明:用户自定义的查询并行度。开启SMP功能后,系统会使用设定的并行度执行。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:1 ~ 64。1表示关闭并行查询。

默认值:1。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在CPU、内存、I/O和网络带宽等资源充足的情况下,并行度越高,性能提升效果越好。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

在开启并行查询后,请保证系统CPU、内存、网络等资源充足,以达到最佳效果。

enable_analyze_check

参数说明:标识在生成计划的时候,对于在pg_class中reltuples和relpages均为0的表,是否允许检查这些表有没有曾进行过统计信息的收集。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

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

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值。启用检查可能会带来计划生成的开销,但会确保是否进行过统计信息的收集;如果确定大多数在pg_class中reltuples和relpages均为0的表无需额外收集统计信息,可保持关闭。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_sonic_hashagg

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

参数类型:布尔型

参数单位:

取值范围:

  • 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。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭可能会导致该场景下查询性能劣化。

enable_sonic_hashjoin

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

参数类型:布尔型

参数单位:

取值范围:

  • 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。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭可能会导致该场景下查询性能劣化。

enable_sonic_optspill

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

参数类型:布尔型

参数单位:

取值范围:

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

默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭可能会导致该场景下查询性能劣化。

plan_cache_mode

参数说明标识在prepare语句中,选择生成执行计划的策略。该参数可在PDB级别设置。

参数类型:枚举类型

参数单位:

取值范围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。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:根据实际业务场景进行设置。

设置不当的风险与影响:设置不当可能会导致计划生成开销增加或计划生成质量下降。

enable_hypo_index

参数说明该参数控制优化器执行EXPLAIN命令时,是否创建虚拟索引。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示在执行EXPLAIN命令时,创建虚拟索引。
  • off:表示在执行EXPLAIN命令时,不创建虚拟索引。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在评估创建索引是否能带来性能提升时可开启此参数。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_force_vector_engine

参数说明对于支持向量化的执行器算子,如果其子节点是非向量化的算子,通过设置此参数为on,强制生成向量化的执行计划。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示可以向量化的算子强制生成向量化。
  • off:表示由向量化算子优化器决定是否向量化。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在向量化业务场景下推荐打开。

设置不当的风险与影响:启用该参数可能导致查询性能劣化。

enable_auto_explain

参数说明控制是否开启自动打印执行计划,该参数可用来定位慢存储过程或慢查询。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,若需要查看执行计划,则开启,但会降低当前系统性能。

设置不当的风险与影响:开启后可能会降低当前系统性能。

auto_explain_level

参数说明控制自动打印执行计划的日志等级。该参数可在PDB级别设置。

参数类型:枚举类型

参数单位:

取值范围

  • log:表示在日志中打印执行计划。
  • notice:表示以提示的形式打印出计划。

默认值log。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

auto_explain_log_min_duration

参数说明控制自动打印执行计划的耗时阈值,整体耗时大于auto_explain_log_min_duration的执行计划才会被打印。比如该参数设置为0时,所有执行过的执行计划都会输出;设置为3000时,单次语句执行耗时超过3000毫秒的所有执行的执行计划会输出。该参数可在PDB级别设置。

参数类型:整型

参数单位:毫秒(ms)

取值范围0 ~ 2147483647

默认值0。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。例如,设置为100,不带单位,表示100ms;设置为2min,带单位,表示2min。取值如果要带单位,必须为ms、s、min、h、d。

设置建议:推荐使用默认值。可根据业务需要调整数值,以输出慢查询语句。

设置不当的风险与影响:设置过小可能会导致输出内容过多。

enable_smp_dml

参数说明:标识是否允许DML语句并行执行。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示允许并行执行DML语句。
  • off:表示不允许并行执行DML语句。

默认值:on

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

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

设置不当的风险与影响:关闭可能会带来性能劣化。

enable_startwith_debug

参数说明该参数控制是否显示start with/connect by用于debug的信息,打开该参数可以显示start with/connect by特性所有涉及的尾列相关信息。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议:推荐使用默认值,在问题定位时打开。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_inner_unique_opt

参数说明控制是否对嵌套循环连接、哈希连接、排序归并连接进行Inner Unique优化,即在连接条件中内表对应的属性满足唯一性约束的情况下,是否减少匹配次数。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭可能会导致对应场景查询性能下降。

enable_indexscan_optimization

参数说明控制是否对astore存储引擎下的btree索引扫描(IndexScan和IndexOnlyScan)进行优化。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭可能会导致对应场景查询性能下降。

enable_uniq_idx_a_compat

参数说明控制复合唯一索引针对Null值是否兼容A数据库。多租场景下,该参数可在PDB级别设置。

参数类型布尔型

参数单位

取值范围

  • on:表示兼容。
  • off:表示不兼容。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议该参数仅在A兼容性的数据库中适用,建议使用默认值。

设置不当的风险与影响设置不当可能会影响兼容性或导致查询规划开销增加。

immediate_analyze_threshold

参数说明:插入数据后自动做analyze的阈值。当一次新增数据量达到原有数据量的immediate_analyze_threshold倍,且原有数据和本次新增数据的总行数超过一百时,会自动触发一次analyze。

参数类型:整型

参数单位:

取值范围:0 ~ 1000。当取值为0时,该功能关闭。

默认值:0

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

设置建议:对数据变化较快且需要不断更新统计信息的表设置为较小值,对达到一定量数据后统计信息才产生较大波动的表设置为较大值。

设置不当的风险与影响:设置过大时,可能导致统计信息未能及时更新;设置过小时,可能导致统计信息分析的开销过大。

  • 该功能只支持永久表和非日志表,不支持临时表。
  • 同一表不会在10s内两次被自动触发analyze。

enable_invisible_indexes

参数说明设置优化器是否可以使用不可见索引。该参数可在PDB级别设置。

索引在被设置为不可见状态后,可能会对查询语句的性能产生影响。此时若不想变更索引可见性状态,且打算使用不可见索引,可设置enable_invisible_indexes参数为on。

参数类型布尔型

参数单位

取值范围

  • on:优化器可以使用不可见索引。
  • off:优化器不可以使用不可见索引。

默认值off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:使用不可见索引但未开启此参数时,可能导致忽略不可见索引,因此可能有更优计划未被考虑。

enable_dynamic_samplesize

参数说明是否动态调整采样行数。对于超过一百万行的大表,收集统计信息时动态调整采样行数,提高统计信息准确性。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示该功能打开。
  • off:表示该功能关闭。

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭后可能会降低统计信息准确性。

动态调整采样行数的功能仅支持绝对值采样。

stats_history_record_limit

参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留数目上限。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息数量达到该阈值,再次收集新的统计信息时,时间较早的统计信息会被清理。

参数类型:整型

参数单位:

取值范围:0 ~ 100

默认值:10

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

设置建议:推荐使用默认值,如果需要记录更多历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。

设置不当的风险与影响:设置过大可能会对analyze的性能产生一定影响。

stats_history_retention_time

参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留时间。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息的保留时间超过该阈值后,再次收集新的统计信息时,已经超过保留时间的统计信息会被清理。

参数类型:浮点型

参数单位:

取值范围:-1、0 ~ 365000,-1表示历史统计信息不因时间而清除。

默认值:31

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

设置建议:推荐使用默认值,如果需要记录更早时间的历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。

设置不当的风险与影响:设置过大可能会对analyze的性能产生一定影响。

default_statistic_granularity

参数说明:默认情况下,当未指定PARTITION_MODE时,指定默认收集哪些分区表分区级统计信息。对非分区表不生效。该参数可在PDB级别设置。

参数类型枚举类型

参数单位

取值范围:

  • all:收集整表、一级分区、二级分区的统计信息。
  • global:收集整表的统计信息。
  • partition:收集一级分区的统计信息。
  • global_and_partition:收集整表、一级分区的统计信息。
  • subpartition:收集二级分区的统计信息。
  • all_complete:收集整表、一级分区、二级分区的统计信息。

默认值:all。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

设置建议推荐使用默认值。如果需要收集分区级统计信息,可根据实际需要设置,但可能会对ANALYZE的性能产生一定影响。

设置不当的风险与影响:需要在维护开销与统计信息准确性间权衡,设置不当可能导致一方代价过大。

enable_fast_numeric_agg

参数说明该参数控制是否开启针对numeric数据类型的agg优化。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:表示开启numeric数据类型的agg优化。
  • off:表示不开启numeric数据类型的agg优化。

默认值on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

设置不当的风险与影响:关闭后可能会导致对应场景查询性能下降。

planmgr_gplan_cost_max_ratio

参数说明:该参数用于控制探测到的通用计划(generic plan)的代价上限,如果通用计划的代价高于平均定制计划(custom plan)的planmgr_gplan_cost_max_ratio倍,则不再尝试通用计划,仅使用定制计划。设置为<1e-6的值则不会限制通用计划的尝试。

参数类型:浮点型

参数单位:

取值范围:0~DBL_MAX

默认值:5

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

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

设置不当的风险与影响:如果设置过小,可能在选择计划的时候会增加实际执行generic plan的性能开销。

enable_poisson_outer_optimization

参数说明:该参数用于控制计划生成阶段计算选择率时,是否用泊松修正outer join中外表上的filter条件的选择率。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示泊松不修正outer join中外表的filter条件的选择率,即计算选择率时不将外表的filter条件按照可下推计算。
  • off:outer join外表的filter条件下推计算选择率。

默认值:升级上来的数据库实例默认为off,新安装的数据库实例默认为on。

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

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

设置不当的风险与影响:可能无法选中较好的执行计划,出现慢sql。

当cost_model_version>=5或为0且enable_poisson_outer_optimization为on时,相关功能才生效。

相关文档