更新时间:2024-05-07 GMT+08:00

其他优化器选项

cost_model_version

参数说明:此参数用来指定优化器代价模型的版本。可以视作一个保护参数,用来禁用最新的优化器代价模型,保持和旧版本计划一致。改变此参数,可能会导致很多SQL计划的改变,因此修改前请谨慎评估。

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

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

  • 0:表示使用最新的cost估算模型。当前版本等价于3。
  • 1:表示使用原始的cost估算模型。
  • 2:表示在1的基础上,使用增强的coalesce表达式估算、hash join代价估算、semi/anti join代价估算。
  • 3:表示在2的基础上,使用边界矫正估计器估算NDV,indexscan的hint可以作用于indexonlyscan。

默认值:0

enable_fast_query_shipping

参数说明:控制查询优化器是否使用分布式框架。

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

取值范围:布尔型

  • on表示执行计划在CN和DN上各自生成。
  • off表示使用分布式框架,即执行计划在CN上生成,然后发送到DN中执行。

默认值:on

enable_trigger_shipping

参数说明:控制触发器场景是否允许将触发器下推到DN执行。

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

取值范围:布尔型

  • on表示允许将触发器下推到DN执行。
  • off表示不允许将触发器下推到DN执行,在CN执行。

默认值:on

enable_remotejoin

参数说明:设置是否允许连接操作计划下推到DN执行。

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

取值范围:布尔型

  • on表示允许连接操作计划下推到DN执行。
  • off表示不允许连接操作计划下推到DN执行。

默认值:on

enable_remotegroup

参数说明:设置是否允许group by与aggregates执行计划下推到DN执行。

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

取值范围:布尔型

  • on表示允许group by与aggregates执行计划下推到DN执行。
  • off表示不允许group by与aggregates执行计划下推到DN执行。

默认值:on

enable_remotelimit

参数说明:设置是否允许LIMIT子句执行计划下推到DN执行。

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

取值范围:布尔型

  • on表示允许LIMIT子句执行计划下推到DN执行。
  • off表示不允许LIMIT子句执行计划下推到DN执行。

默认值:on

enable_remotesort

参数说明:设置是否允许ORDER BY子句操作计划下推到DN执行。

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

取值范围:布尔型

  • on表示允许ORDER BY子句操作计划下推到DN执行。
  • off表示不允许ORDER BY子句操作计划下推到DN执行。

默认值:on

enable_csqual_pushdown

参数说明:进行查询时,是否要将过滤条件下推,进行Rough Check。

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

取值范围:布尔型

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

默认值:on

explain_dna_file

参数说明:指定explain_perf_mode为run,导出的csv信息的目标文件。

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

这个参数的取值必须是绝对路径加上.csv格式的文件名。

取值范围:字符串

默认值:

analysis_options

参数说明:通过开启对应选项中所对应的功能选项使用相应的定位功能,包括数据校验,性能统计等,参见取值范围中的选项说明。

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

取值范围:字符串

  • HASH_CONFLICT表示在DN进程的pg_log目录中的log日志中显示hash表的统计信息,包括hash表大小,hash链长,hash冲突情况。
  • STREAM_DATA_CHECK表示对网络传输前后的数据进行CRC校验。

默认值:ALL,on(),off(HASH_CONFLICT,STREAM_DATA_CHECK),不开启任何定位功能。

explain_perf_mode

参数说明:此参数用来指定explain的显示格式。

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

取值范围: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算子的计划。

cost_param

参数说明:该参数用于控制在特定的客户场景中,使用不同的估算方法使得估算值与真实值更接近。此参数可以同时控制多种方法,与某一方法对应的位做与操作,不为0表示该方法被选择。
  • 当cost_param & 1不为0,表示对于求不等值连接选择率时选择一种改良机制,此方法在自连接(两个相同的表之间连接)的估算中更加准确。当前版本已弃用cost_param & 1不为0时的路径,默认选择更优的估算公式。
  • 当cost_param & 2不为0,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确。
  • 当cost_param & 4不为0,表示在进行stream节点估算时,选用调试模型,该模型不推荐用户使用。

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

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

默认值:0

enable_partitionwise

参数说明:分区表连接操作是否选择智能算法。

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

取值范围:布尔型

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

默认值:off

enable_fast_numeric

参数说明:标识是否开启Numeric类型数据运算优化。Numeric数据运算是较为耗时的操作之一,通过将Numeric转化为int64/int128类型,提高Numeric运算的性能。

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

取值范围:布尔型

  • on/true表示开启Numeric优化。
  • off/false表示关闭Numeric优化。

默认值:on

rewrite_rule

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

此参数可以控制查询重写规则的组合,比如有多个重写规则:rule1、rule2、rule3、rule4。可以设置:

set rewrite_rule=rule1;          --启用查询重写规则rule1
set rewrite_rule=rule2,rule3;    --启用查询重写规则rule2和rule3
set rewrite_rule=none;           --关闭所有可选查询重写规则

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

取值范围:字符串

  • 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算子来支持分布式执行)。
  • 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调优点 > 子查询调优”章节。

默认值:magicset

enable_pbe_optimization

参数说明:设置优化器是否对以PBE(Parse Bind Execute)形式执行的语句进行查询计划的优化。

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

取值范围:布尔型。

  • on表示优化器将优化PBE语句的查询计划。
  • off表示不使用优化。

默认值:on

enable_light_proxy

参数说明:设置优化器是否对简单查询在CN上优化执行,应用端和内核端字符集不匹配时,该参数不生效,建议建库时将字符集设为UTF8。

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

取值范围:布尔型。

  • on表示优化器将优化CN上简单查询的执行。
  • off表示不使用优化。

默认值:on

enable_global_plancache

参数说明:设置是否对PBE查询和存储过程中语句的执行计划进行缓存共享,开启该功能可以节省高并发下CN和DN上的内存使用。且该参数必须在CN和DN上一致,否则会出现CN下发给DN的报文不匹配从而报错等问题。

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

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

取值范围:布尔型。

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

默认值:off

gpc_clean_timeout

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

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

取值范围:整型,300~86400,单位为秒

默认值:1800,即30min

enable_gpc_grayrelease_mode

参数说明:分布式集群下,开启GPC需要重启集群。如果需要在不重启集群的情况下开启GPC,需要用enable_gpc_grayrelease_mode控制滚动开启GPC或关闭GPC。

分布式集群上操作方式。

开启GPC:

1、在所有DN节点开启enable_gpc_grayrelease_mode。

2、在所有CN节点开启enable_gpc_grayrelease_mode。

3、开启GPC参数,由于GPC是POSTMASTER参数,需要先reload参数,之后轮询kill节点,使重新拉起的节点上GPC生效。

关闭GPC:

1、首先确定enable_gpc_grayrelease_mode 是on的状态,reload关闭GPC参数,然后轮询kill节点,使重新拉起的节点上GPC生效。

2、在所有CN节点关闭enable_gpc_grayrelease_mode。

3、在所有DN节点关闭enable_gpc_grayrelease_mode。

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

取值范围:布尔型。

  • on
  • off

默认值:off

enable_opfusion

参数说明:控制是否对简单查询进行查询优化。

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

该开关是优化DN的查询性能,可以设置max_datanode_for_plan查看一个查询DN的执行计划,如果DN的执行计划中带有[Bypass]标识则代表该查询在该DN可以查询优化。

简单查询限制如下:
  • 只支持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

enable_partition_opfusion

参数说明:在enable_opfusion参数打开的状态下,如果开启该参数,可以对分区表的简单查询进行查询优化,提升SQL执行性能。在enable_global_plancache参数设置为on时,此参数设置on将不生效。

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

取值范围:布尔型

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

默认值:off

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特性

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

取值范围:字符串

  • 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类型转换规则兼容O,详见《开发者指南》的“SQL参考 > 类型转换 > UNION,CASE和相关构造”章节中的“对于case,在ORA兼容模式下的处理”部分内容。
  • plpgsql_stream_fetchall:在存储过程中for loop或cursor上执行的sql走stream场景下,开启获取所有tuple结果。
  • partition_fdw_on:支持基于分区表创建postgres 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执行。

默认值:"sel_semi_poisson,sel_expr_instr,rand_cost_opt,param_path_opt,page_est_opt"

table_skewness_warning_threshold

参数说明:设置用于表倾斜告警的阈值。

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

取值范围:浮点型,0~1

默认值:1

table_skewness_warning_rows

参数说明:设置用于表倾斜告警的行数。

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

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

默认值:100000

enable_global_stats

参数说明:标识当前统计信息模式,区别采用全局统计信息收集模式还是单节点统计信息收集模式,默认创建为采用全局统计信息模式。当关闭该参数时,则默认收集集群第一个节点的统计信息,此时可能会影响生成查询计划的质量,但信息收集性能较优,建议谨慎设置。

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

取值范围:布尔型

  • on/true表示全局统计信息。
  • off/false表示单DN统计信息。

默认值:on

default_statistics_target

参数说明:为没有用ALTER TABLE SET STATISTICS设置字段目标的表设置缺省统计目标。此参数设置为正数是代表统计信息的样本数量,为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%。

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

取值范围:整型,-100~10000。

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

默认值:100

default_gsi_statistics_target

参数说明:为全局二级索引设置缺省统计目标。此参数设置为正数是代表统计信息的样本数量;为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%。

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

取值范围:整型,-100~3000000。

默认值:0

  • 默认值为0表示采用内部默认计算采样率的方法进行采样。
  • 调整此参数可能存在性能劣化的风险,如果某个查询劣化,可以考虑:
    1. 恢复默认的统计信息。
    2. 使用plan hint来调整到之前的查询计划。详细参见《开发者指南》的“SQL调优指南 > 使用Plan Hint进行调优”章节。

auto_statistic_ext_columns

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

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

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

取值范围:整型,1~4。1就是表示不会自动收集多列统计信息。

默认值:1

constraint_exclusion

参数说明:控制查询优化器使用表约束查询的优化。

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

取值范围:枚举类型

  • on/true/yes/1表示检查所有表的约束。
  • off/false/no/0表示不检查约束。
  • partition表示只检查继承的子表和UNION ALL子查询。

    当constraint_exclusion为on,优化器用查询条件和表的CHECK约束比较,并且在查询条件和约束冲突的时候忽略对表的扫描。

默认值:partition

目前, constraint_exclusion缺省被打开,通常用来实现表分区。为所有的表打开它时,对于简单的查询强加了额外的规划,并且对简单查询没有什么好处。如果不用分区表,可以关掉它。

cursor_tuple_fraction

参数说明:优化器估计游标获取行数在总行数中的占比。

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

取值范围:浮点型,0.0~1.0。

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

默认值:0.1

from_collapse_limit

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

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

取值范围:整型,1~2147483647‬。

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

默认值:8

join_collapse_limit

参数说明:根据得出的列表项数来判断优化器是否执行把除FULL JOINS之外的JOIN构造重写到FROM列表中。

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

取值范围:整型,1~2147483647‬。

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

默认值:8

plan_mode_seed

参数说明:该参数为调测参数,目前仅支持OPTIMIZE_PLAN和RANDOM_PLAN两种。其中:OPTIMIZE_PLAN表示通过动态规划算法进行代价估算的最优plan,参数值设置为0;RANDOM_PLAN表示随机生成的plan;如果设置为-1,表示用户不指定随机数的种子标识符seed值,由优化器随机生成[1, 2147483647]范围整型值的随机数,并根据随机数生成随机的执行计划;如果用户指定guc参数值为[1, 2147483647]范围的整型值,表示指定的生成随机数的种子标识符seed,优化器需要根据seed值生成随机的执行计划。

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

取值范围:整型,-1~ 2147483647

默认值:0

  • 当该参数设置为随机执行计划模式时,优化器会生成不同的随机执行计划,该执行计划可能不是最优计划。因此在随机计划模式下,会对查询性能产生影响,所以建议在升级、扩容、缩容等正常业务操作或运维过程中将该参数保持为默认值0。
  • 当该参数不为0时,查询指定的plan hint不会生效。

enable_random_datanode

参数说明:标示是否允许开启复制表DN随机查找功能,复制表在每个DN存放一份完整数据,随机选取可以缓解节点压力。

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

取值范围:布尔型

  • on表示允许开启复制表DN随机查找功能。
  • off表示不允许开启复制表DN随机查找功能。

默认值:on

hashagg_table_size

参数说明:用于设置执行HASH JOIN操作时HASH表的大小。

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

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

默认值:0

enable_bloom_filter

参数说明:标识是否允许使用BloomFilter优化。该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

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

默认值:on

enable_extrapolation_stats

参数说明:标识对于日期类型是否允许基于历史统计信息使用推理估算的逻辑。使用该逻辑对于未及时收集统计信息的表可以增大估算准确的可能性,但也存在错误推理导致估算过大的可能性,需要对于日期类型数据定期插入的场景开启此开关。该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

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

默认值:off

autoanalyze

参数说明:标识是否允许在生成计划的时候,对于没有统计信息的表进行统计信息自动收集。对于外表和临时表,不支持autoanalyze,如果需要收集统计信息,用户需手动执行analyze操作。如果在auto analyze某个表的过程中数据库发生异常,当数据库正常运行之后再执行语句有可能仍提示需要收集此表的统计信息。此时需要用户对该表手动执行一次analyze操作,以同步统计信息数据。该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:布尔型

  • on表示允许自动进行统计信息收集。
  • off表示不允许自动进行统计信息收集。

默认值:off

query_dop

参数说明:用户自定义的查询并行度。该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

取值范围:整型,-64-64

[1,64]:打开固定SMP功能,系统会使用固定并行度。

0:打开SMP自适应功能,系统会根据资源情况和计划特征动态选取最优并行度。

[-64,-1]:打开SMP自适应功能,并限制自适应选取的最大并行度。

  • 在开启并行查询后,请保证系统CPU、内存、网络、I/O等资源充足,以达到最佳效果。
  • 为了避免用户设置不合理的过大值造成性能劣化,系统会计算出该DN可用最大CPU核数,并以此来作为query_dop的上限。如果用户设置query_dop超过4并且同时超过该上限,那么系统会重置query_dop为该上限值。

默认值:1

enable_analyze_check

参数说明: 标识是否允许在生成计划的时候,对于在pg_class中显示reltuples和relpages均为0的表,检查该表是否曾进行过统计信息收集。

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

取值范围:布尔型

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

默认值:off

enable_sonic_hashagg

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

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

取值范围:布尔型

  • on表示在满足约束条件时使用基于面向列的hash表设计的Hash Agg算子。
  • off表示不使用面向列的hash表设计的Hash Agg算子。
  • 在开启enable_sonic_hashagg,且查询达到约束条件使用基于面向列的hash表设计的Hash Agg算子时,查询对应的Hash Agg算子内存使用通常可获得精简。但对于代码生成技术可获得显著性能提升的场景,对应的算子查询性能可能会出现劣化。
  • 开启enable_sonic_hashagg,且查询达到约束条件使用基于面向列的hash表设计的Hash Agg算子时,在Explain Analyze/Performance的执行计划和执行信息中,算子显示为“Sonic Hash Aggregation”,而未达到该约束条件时,算子名称将显示为“Hash Aggregation”,Explain详解请参见《开发者指南》的“SQL调优指南 > SQL执行计划介绍 > 详解”章节。

默认值:on

enable_sonic_hashjoin

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

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

取值范围:布尔型

  • 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

enable_sonic_optspill

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

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

取值范围:布尔型

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

默认值:on

plan_cache_mode

参数说明:标识在prepare语句中,选择生成执行计划的策略。

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

取值范围:枚举类型

  • auto表示按照默认的方式选择custom plan或者generic plan。
  • force_generic_plan表示强制走generic plan(软解析)。generic plan是指对于prepare语句生成计划,该计划策略会在执行execute语句的时候把参数bind到plan中,然后执行计划。这种方案的优点是每次执行可以省去重复的优化器开销;缺点是当bind参数字段上数据存在倾斜时该计划可能不是最优的,部分bind参数场景下执行性能较差。
  • force_custom_plan表示强制走custom plan(硬解析)。custom plan是指对于prepare语句,在执行execute的时候,把execute语句中的参数嵌套到语句之后生成的计划。custom plan会根据execute语句中具体的参数生成计划,这种方案的优点是每次都按照具体的参数生成优选计划,执行性能比较好;缺点是每次执行前都需要重新生成计划,存在大量的重复的优化器开销。

此参数只对prepare语句生效,一般用在prepare语句中参数化字段存在比较严重的数据倾斜的场景下。

默认值:auto

enable_router

参数说明:是否打开手动设置下推节点功能。

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

取值范围:布尔型

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

默认值:off

router

参数说明:用于控制router功能的详细属性,仅在打开enable_router和enable_light_proxy后生效。该参数会根据表的hash分布列,计算给定的分布列在哪个DN上,设置router后将支持的sql下推到该DN上执行。如果设置错了router,可能导致数据存入错误的dn,导致不可预测的问题,需谨慎使用。

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

取值范围:字符串

该参数分为两部分,'schema_name.table_name,"distribute_keys"',其具体含义如下:

  • schema_name.table_name:表示schema名和表名,如不显示设置schema_name,则默认为current_schema。
  • distribute_keys:分布表的所有分布列值,用逗号间隔开,且分布列值的顺序必须和表中分布列顺序一致。

默认值:空

enable_auto_explain

参数说明:控制是否开启自动打印执行计划。该参数是用来定位慢存储过程或慢查询,只对当前连接的CN有效。

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

取值范围:布尔型,on表示开启,off表示关闭。

默认值:off

auto_explain_level

参数说明:控制自动打印执行计划的日志等级。

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

取值范围:枚举型,log或notice,log表示在日志中打印执行计划,notice表示以提示知的形式打印出计划。

默认值:log

auto_explain_log_min_duration

参数说明:控制自动打印执行计划的耗时阈值,整体耗时大于auto_explain_log_min_duration的执行计划才会被打印。

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

取值范围:整形,0~2147483647,单位为毫秒。

  • 设置为0,所有执行过的执行计划都会输出。
  • 设置为3000,单次语句执行耗时超过3000毫秒后所有执行的执行计划会输出。

默认值:0

max_datanode_for_plan

参数说明:生成FQS计划时设置显示DN上执行计划的个数。显示DN上计划的个数由集群中的DN数和该参数值的更小者决定。

对于PBE执行的语句,当前只能显示内核prepare预编译方式生成的计划,不支持显示JDBC预编译方式生成的计划。

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

取值范围:整型,0 ~ 8192

默认值:0

enable_inner_unique_opt

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

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

取值范围:布尔型

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

默认值:on。

enable_indexscan_optimization

参数说明:控制是否对astore存储引擎下的btree索引扫描(IndexScan和IndexOnlyScan)进行优化。

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

取值范围:布尔型

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

默认值:off。

session_sequence_cache

参数说明:在当前会话下,一次性交互申请的sequence数值,会话结束会自动丢弃未用完的值。用户在使用sequence大批量导入数据的时候可以通过调大该参数,提高插入速度,增加高并发性能;用户在高并发单条插入数据的时候,将该参数设置为1,减少了sequence的跳变。如对连续性有强要求,需要在创建sequence的时候指定需要的cache,该参数如果大于cache指定的值会自动失效。

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

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

默认值:10

默认值为10是高并发场景下,兼顾单条插入和批量插入的性能会有比较好的表现。

enable_dynamic_samplesize

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

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

取值范围:布尔型

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

默认值:on

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