其他优化器选项
cost_model_version
参数说明:此参数用来指定优化器代价模型的版本。可以视作一个保护参数,用来禁用最新的优化器代价模型,保持和旧版本计划一致。改变此参数,可能会导致很多SQL计划的改变。因此修改前请谨慎评估。
参数类型:整型
参数单位:无
取值范围:0、1、2、3、4
- 0:表示使用最新的cost估算模型。当前版本等价于4。
- 1:表示使用原始的cost估算模型。
- 2:表示在1的基础上,使用增强的coalesce表达式估算、hash join代价估算、semi/anti join代价估算。
- 3:表示在2的基础上,使用边界矫正估计器估算NDV, indexscan的hint可以作用于indexonlyscan。
- 4:表示在3的基础上,使用分区级统计信息参与代价估算。
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:数据库升级时,建议和升级前版本保持一致;新安装环境时,建议设置为默认值。
explain_dna_file
参数说明:指定explain_perf_mode为run,导出的csv信息的目标文件。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
这个参数的取值必须是绝对路径加上.csv格式的文件名。
取值范围:字符串
默认值:空
explain_perf_mode
参数说明:此参数用来指定explain的显示格式。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围: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
analysis_options
参数说明:通过开启对应选项中所对应的功能选项使用相应的定位功能,包括数据校验、性能统计等,参见取值范围中的选项说明。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:字符串
- LLVM_COMPILE表示在explain performance显示界面中显示每个线程的codegen编译时间。
- HASH_CONFLICT表示在数据库节点进程的gs_log目录中的log日志中显示hash表的统计信息,包括hash表大小、hash链长、hash冲突情况。
- STREAM_DATA_CHECK表示对网络传输前后的数据进行CRC校验。
默认值:ALL,on(),off(LLVM_COMPILE,HASH_CONFLICT,STREAM_DATA_CHECK),不开启任何定位功能。
cost_param
参数说明:该参数用于控制在特定的客户场景中,使用不同的估算方法使得估算值与真实值更接近。此参数可以同时控制多种方法,与某一方法对应的位做与操作,不为0表示该方法被选择。
当cost_param & 1 不为0,表示对于求不等值连接选择率时选择一种改良机制,此方法在自连接(两个相同的表之间连接)的估算中更加准确。目前,已弃用cost_param & 1 不为0时的路径,默认选择更优的估算公式;
当cost_param & 2 不为0,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确;
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:整型,0~INT_MAX
默认值:0
var_eq_const_selectivity
参数说明:整型const选择率是否使用新型选择率模型进行估算。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on表示使用新型选择率模型计算整型const的选择率:
- 若整型不落入MCV且不为NULL值,但落入直方图,则利用直方图左右边界情况进行估算;不落入直方图,则使用表的行数进行估算。
- 若整型为NULL值或者MCV值,使用原逻辑计算选择率。
- off表示使用原有的选择率计算模型。
默认值:off
enable_partitionwise
参数说明:分区表连接操作是否选择智能算法。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on表示选择智能算法。
- off表示不选择智能算法。
默认值:off
partition_page_estimation
参数说明:分区表页面是否通过剪枝结果进行页面估算优化。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on表示使用剪枝结果进行页面估算优化。
- off表示不使用剪枝结果进行页面估算优化。
默认值:off
partition_iterator_elimination
参数说明:分区表在分区剪枝结果为一个分区时,是否消除分区迭代算子来提升执行效率。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on表示消除分区迭代算子。
- off表示不消除分区迭代算子。
默认值:off
enable_partition_pseudo_predicate
参数说明:在指定分区查询场景下,是否使用伪谓词改写的方式计算指定分区查询的选择率。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on表示使用伪谓词改写。
- off表示不使用伪谓词改写。
默认值:off
enable_functional_dependency
参数说明:ANALYZE生成的多列统计信息是否包含函数依赖统计信息,是否应用函数依赖统计信息计算选择率。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on包含两个功能:1. 执行ANALYZE生成的多列统计信息包含函数依赖统计信息。2. 计算选择率会使用函数依赖统计信息。
- off包含两个功能:1. 执行ANALYZE生成的多列统计信息不包含函数依赖统计信息。2. 计算选择率不会使用函数依赖统计信息。
默认值:off
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查询重写规则(将带有聚集算子的子查询提前和主查询进行关联,减少子链接的重复扫描)。
- 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:禁止将父查询中的窗口函数的过滤条件下推到子查询中。
默认值:magicset
集中式下可以设置partialpush、disablerep参数,但实际不生效。
enable_pbe_optimization
参数说明:设置优化器是否对以PBE(Parse Bind Execute)形式执行的语句进行查询计划的优化。
参数类型:布尔型
参数单位:无
取值范围:
- on表示优化器将优化PBE语句的查询计划。
- off表示不使用优化。
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
enable_global_plancache
参数说明:设置是否对PBE查询和存储过程中语句的执行计划进行缓存共享,开启该功能可以节省高并发下数据库节点的内存使用。
在打开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的时间没有被使用,则会被清理掉。本参数用于控制没有使用的共享计划的保留时间。
该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
取值范围:整型,300~86400
- 单位为秒
默认值:1800,即30min
enable_global_stats
该参数当前版本已废弃,请勿设置。
enable_opfusion
参数说明:控制是否对简单增删改查进行优化。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
简单查询限制如下:
- 只支持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_plsql_opfusion
参数说明:如果开启该参数,可以对存储过程中的简单增删改查语句进行优化,提升SQL执行性能。
简单增删改查语句的限制请参见enable_opfusion中相关说明。
仅在enable_opfusion参数打开的状态下生效。
参数类型:布尔型
参数单位:无
取值范围:
- on表示使用。
- off表示不使用。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:设置为默认值,不做调整。
sql_beta_feature
参数说明:标识开启的可选SQL引擎Beta特性,其中包括对行数估算、查询等价估算等优化。
开启它们可以对特定的场景进行优化,但也可能会导致部分没有被测试覆盖的场景发生性能劣化。在特定的客户场景中,通过此GUC参数对查询重写规则进行设置,使得查询效率最优。
此参数可以控制SQL引擎Beta特性的组合,比如有多个Beta特性:feature1、feature2、feature3、feature4。可以设置:
--启用SQL引擎Beta特性feature1。 set sql_beta_feature=feature1; --启用SQL引擎Beta特性feature2和feature3。 set sql_beta_feature=feature2,feature3; --关闭所有可选SQL引擎Beta特性。 set sql_beta_feature=none;
该参数属于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:估算索引代价时考虑索引叶子节点。
- a_style_coerce:开启Decode类型转换规则兼容O,具体请参见《开发指南》的“SQL参考 > 类型转换 > UNION,CASE和相关构造”章节中的“对于case,在ORA兼容模式下的处理”部分内容。
- 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_text_expr_flatten:关闭text和数值类型(numeric, bigint)进行比较运算时自动内联表达式的功能。
默认值:"sel_semi_poisson,sel_expr_instr,rand_cost_opt,param_path_opt,page_est_opt"
default_statistics_target
参数说明:为没有用ALTER TABLE SET STATISTICS设置字段目标的表设置缺省统计目标。影响收集统计信息时的采样行数。
此参数设置为正数时,代表统计信息直方图预期桶的数量统计信息采样行数为default_statistics_target * 300;为负数时,代表使用百分比的形式设置统计目标,负数转换为对应的百分比,即-5代表5%,采样行数为总行数 * 5%。此参数仅影响统计信息的目标采样行数,实际采样行数还会受到内存参数maintenance_work_mem的限制。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:整型,-100~10000。
- 比默认值大的正数数值增加了ANALYZE所需的时间,但是可能会改善优化器的估计质量。
- 调整此参数可能存在性能劣化的风险,如果某个查询劣化,可以考虑
- 恢复默认的统计信息。
- 使用plan hint来调整到之前的查询计划。详细参见《开发指南》的“SQL调优指南 > 使用Plan Hint进行调优”章节。
默认值:100
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表示检查所有表的约束。
- off表示不检查约束。
- 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~INT_MAX。
比默认值小的数值将降低规划时间,但是可能生成差的执行计划。
默认值:8
join_collapse_limit
参数说明:根据得出的列表项数来判断优化器是否执行把除FULL JOINS之外的JOIN构造重写到FROM列表中。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:整型,1~INT_MAX。
- 设置为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不会生效。
hashagg_table_size
参数说明:用于设置执行HASH JOIN操作时HASH表的大小。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:整型,0~INT_MAX/2。
默认值:0
enable_codegen
参数说明:标识是否允许开启代码生成优化,目前代码生成使用的是LLVM优化。
参数类型:布尔型
参数单位:无
取值范围:
- on表示允许开启代码生成优化。
- off表示不允许开启代码生成优化。
默认值:on
设置方式:该参数属于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执行完毕后释放。
默认值:131072kB(128MB)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
- 最大占用内存如果设置过小,则易使系统不再使用Codegen执行逻辑,影响功能使用。
- 最大占用内存如果设置过大,可能会造成LLVM的编译过多占用其他线程的资源,造成系统整体性能下降。
enable_codegen_print
参数说明:标识是否允许在log日志中打印所生成的LLVM IR函数。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on表示允许在log日志中打印IR函数。
- off表示不允许在log日志中打印IR函数。
默认值:off
codegen_cost_threshold
参数说明:由于LLVM编译生成最终的可执行机器码需要一定时间,因此只有当实际执行的代价大于编译生成机器码所需要的代码和优化后的执行代价之和时,利用代码生成才有收益。codegen_cost_threshold标识代价的阈值,当执行估算代价大于该代价时,使用LLVM优化。codegen使用执行算子的plan_rows作为代价与codegen_cost_threshold进行比较,plan_rows的值可以通过explain命令查看。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:整型,0 ~ 2147483647。
默认值:100000
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操作,以同步统计信息数据。
参数类型:布尔型
参数单位:无
取值范围:
- on表示允许自动进行统计信息收集。
- off表示不允许自动进行统计信息收集。
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
该参数与autovacuum线程下的autoanalyze无关。集中式下该参数不生效。
enable_analyze_check
参数说明:标识是否允许在生成计划的时候,对于在pg_class中显示reltuples和relpages均为0的表,检查这些表是否曾进行过统计信息收集。
参数类型:布尔型
参数单位:无
取值范围:
- on表示允许检查。
- off表示不允许检查。
默认值:off
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
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_codegen打开后获得较大性能提升),对应的算子查询性能可能会出现劣化。
- 开启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语句中,选择生成执行计划的策略。
参数类型:枚举型
参数单位:无
取值范围:
- 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_hypo_index
参数说明:该参数控制优化器执行EXPLAIN命令时,是否创建虚拟索引。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示在执行EXPLAIN命令时,创建虚拟索引。
- off:表示在执行EXPLAIN命令时,不创建虚拟索引。
默认值:off
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
enable_auto_explain
参数说明:控制是否开启自动打印执行计划。该参数是用来定位慢存储过程或慢查询,对当前连接的数据库主节点和直连的备机有效。
参数类型:布尔型
参数单位:无
取值范围:
- true表示开启。
- false表示关闭。
默认值:false
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,若需查看执行计划,则开启,但会降低当前系统性能。
auto_explain_level
参数说明:控制自动打印执行计划的日志等级。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:枚举型,LOG或NOTICE:
- LOG表示在日志中打印执行计划。
- NOTICE表示以提示知的形式打印出计划。
默认值:LOG
auto_explain_log_min_duration
参数说明:控制自动打印执行计划的耗时阈值,整体耗时大于auto_explain_log_min_duration的执行计划才会被打印。比如设置为0,所有执行过的执行计划都会输出;设置为3000,单次语句执行耗时超过3000毫秒的所有执行的执行计划会输出。
参数类型:整型
参数单位:毫秒
取值范围:0~2147483647
默认值:0
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
query_dop
参数说明: 用户自定义的查询并行度。开启SMP功能,系统会使用设定的并行度执行。
参数类型:整型
参数单位:无
取值范围:1 ~ 64。1表示关闭并行查询。
默认值:1
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
在开启并行查询后,请保证系统CPU、内存、网络等资源充足,以达到最佳效果。
enable_startwith_debug
参数说明:该参数为start with/connect by用于debug的参数,打开参数可以显示start with特性所有涉及的尾列相关信息。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型,true表示开启,false表示关闭。
默认值:false。
enable_inner_unique_opt
参数说明:对嵌套循环连接、哈希连接、排序归并连接进行Inner Unique优化,即在连接条件中内表对应的属性满足唯一性约束的情况下,减少匹配次数。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on:表示使用。
- off:表示不使用。
默认值:on。
enable_indexscan_optimization
参数说明:控制是否对astore存储引擎下的btree索引扫描(IndexScan和IndexOnlyScan)进行优化。
该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
取值范围:布尔型
- on:表示使用。
- off:表示不使用。
默认值:on。
immediate_analyze_threshold
参数说明:插入数据后自动做analyze的阈值。当一次新增数据量达到原有数据量的immediate_analyze_threshold倍,且总行数超过一百时,会自动触发一次analyze。
参数类型:整型
参数单位:无
取值范围:0~1000。当取值为零时,该功能关闭。
默认值:0
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:对数据变化较快且需要不断更新统计信息的表设置为较小值,对达到一定量数据后统计信息才产生较大波动的表设置为较大值。
- 该功能只支持永久表和非日志表,不支持临时表。
- 同一表不会在10s内两次被自动触发analyze。
enable_invisible_indexes
参数说明:设置优化器是否可以使用不可见索引。
索引在被设置为不可见状态后,可能会对查询语句的性能产生影响。此时若不想变更索引可见性状态,且打算使用不可见索引,可设置enable_invisible_indexes参数为on。
参数类型:布尔型
参数单位:无
取值范围:
- on:优化器可以使用不可见索引。
- off:优化器不可以使用不可见索引。
默认值:off
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
enable_dynamic_samplesize
参数说明:是否动态调整采样行数。对于超过一百万行的大表,收集统计信息时动态调整采样行数,提高统计信息准确性。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示该功能打开。
- off:表示该功能关闭。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
动态调整采样行数的功能仅支持绝对值采样。
STATS_HISTORY_RECORD_LIMIT
参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留数目上限。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息数量达到该阈值,再次收集新的统计信息时,时间较早的统计信息会被清理。
参数类型:整型
参数单位:条
取值范围:0 ~ 100
默认值:10
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如果需要记录更多历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。
STATS_HISTORY_RETENTION_TIME
参数说明:每个对象(包括表、列、分区、索引)的历史统计信息保留时间。每个对象在收集统计信息时会同时存入历史统计信息表中,当历史统计信息表中该对象的统计信息的保留时间超过该阈值后,再次收集新的统计信息时,已经超过保留时间的统计信息会被清理。
参数类型:浮点型
参数单位:天
取值范围:-1、0 ~ 365000,-1表示历史统计信息不因时间而清除。
默认值:31
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,如果需要记录更早时间的历史版本的统计信息可以适当调大该参数,但可能会对analyze的性能产生一定影响。
default_statistic_granularity
参数说明:默认情况下,当未指定PARTITION_MODE时,指定默认收集哪些分区表分区级统计信息。对非分区表不生效。
参数类型:枚举型
参数单位:无
取值范围:枚举型
- ALL:收集整表、一级分区、二级分区的统计信息。
- GLOBAL:收集整表的统计信息。
- PARTITION:收集一级分区的统计信息。
- GLOBAL_AND_PARTITION:收集整表、一级分区的统计信息。
- SUBPARTITION:收集二级分区的统计信息。
- ALL_COMPLETE:收集整表、一级分区、二级分区的统计信息。
默认值:ALL
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。如果需要收集分区级统计信息,可根据实际需要设置,但可能会对ANALYZE的性能产生一定影响。