其它优化器选项
rewrite_rule
参数说明:标识开启的可选查询重写规则。有部分查询重写规则是可选的,开启它们并不能总是对查询效率有提升效果。在特定的客户场景中,通过此GUC参数对查询重写规则进行设置,使得查询效率最优。
此参数可以控制查询重写规则的组合,比如有多个重写规则:rule1、rule2、rule3、rule4。可以设置:
启用查询重写规则rule1。
set rewrite_rule=rule1;
启用查询重写规则rule2和rule3。
set rewrite_rule=rule2,rule3;
关闭所有可选查询重写规则。
set rewrite_rule=none;
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:字符串
none:不使用任何可选查询重写规则。
lazyagg:使用Lazy Agg查询重写规则(消除子查询中的聚集运算)。
magicset : 使用Magic Set查询重写规则(从主查询中下推条件到子查询)。
partialpush:使用Partial Push查询重写规则。
uniquecheck:使用Unique Check查询重写规则(提升目标列中无agg的子查询语句,在执行时检查返回行数是否为1行)。
disablerep:使用Disable Replicate查询重写规则。
intargetlist:使用In Target List查询重写规则(提升目标列中的子查询)。
predpushnormal:使用Predicate Push查询重写规则(下推谓词条件到子查询中)。
predpushforce:使用Predicate Push查询重写规则(下推谓词条件到子查询中,尽可能的利用索引加速)。
predpush:在predpushnormal和predpushforce中根据代价选择最优计划。
rownumenhance:可以将
rownum < const
或rownum <= const
的场景转为limit常量算子。enable_any_sublink_pullup_enhanced:计划器尝试将相关子连接进行提升,生成更好的执行计划。详细用法可参见ANY子连接性能优化。
disable_pullup_expr_sublink:禁止优化器将expr_sublink类型的子连接提升,关于sublink的分类和提升原理详见子查询调优。
enable_sublink_pullup_enhanced:使用增强后的sublink查询重写规则,包括where、 having子句的非相关子链接提升和winmagic重写优化。
enable_opfusion_reuse
参数说明: 用于控制opfusion对象是否复用,仅在enable_opfusion = on的前提下有效。开启此参数后:在表相同,resultdesc相同的情况下,将复用上一个opfusion对象。
该参数属于USERSET类型,请参考重设参数表1对应设置方法进行设置。
取值范围: 布尔型
on:开启opfusion对象复用功能。
off:关闭opfusion对象复用功能。
默认值: off
设置建议: 开启此参数后,在单表事务内批量提交的insert场景下,性能可提升10~15%。如果在此种场景下对性能有一定要求,建议打开此参数。
enable_partition_joinclauses_pushdown
参数说明: 用于分区表的嵌套连接场景。如果扫描节点为顺序扫描,且存在分区键相关的连接条件,控制是否将连接条件进行下推。
该参数属于USERSET类型,请参考重设参数表1对应设置方法进行设置。
取值范围: 布尔型
on:开启分区键连接条件下推功能。
off:关闭分区键连接条件下推功能。
默认值: off
skewed_param_factor
参数说明: 指定选用自适应custom计划(plan_cache_mode = 'adaptive_custom_plan' 时)时的偏斜因子。行数最多的值与最少的值之间相差超过这个阈值,认为数据存在偏斜。
该参数属于USERSET类型,请参考重设参数表1对应设置方法进行设置。
取值范围: 2~2147483647
默认值: 10
transform_to_numeric_operators
参数说明: 用于控制transform阶段操作符选择时的选择逻辑。
当双目运算符两端接的是varchar和int类型的变量时,启用此参数会将操作符的两端均解析为numeric类型的变量从而选择操作符。
例如,解析'1.1' + 1
时:
未启用此参数时,执行时报错,原因是解析阶段将varchar被解析为int类型,导致类型转换时报错。
启用此参数后,varchar将被解析为numeric,执行不会报错。
该参数属于USERSET类型,请参考重设参数表1对应设置方法进行设置。
取值范围: 布尔型
on:开启该参数。
off:关闭该参数。
默认值: off
enable_hashjoin_nestloop
参数说明:此参数用于解决hashjoin因为存在可能的大量重复值导致分区不能分裂从而造成的OOM问题。
该参数属于USERSET类型,请参考重设参数表1对应设置方法进行设置。
取值范围:布尔型
on:开启hashjoin重复值落盘的功能。
off:关闭hashjoin重复值落盘的功能。
默认值:off
设置建议:当执行含有hashjoin算子的SQL时发生了OOM问题,并且数据的确存在大量重复值时,开启此参数则不会发生OOM,但性能会大幅度降低。