
# 其他优化器选项
#### default_statistics_target
**参数说明**：为没有用ALTER TABLE SET STATISTICS设置字段目标的表设置缺省统计目标。此参数设置为正数是代表统计信息的样本数量，为负数时，代表使用百分比的形式设置统计目标，负数转换为对应的百分比，即-5代表5%。采样时，会将default_statistics_target \* 300作为随机抽样的大小，例如默认值为100时，会随机读取30000个页面再从中随机取30000条数据来完成随机抽样。
**取值范围**：浮点型，-100～10000。
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- 比默认值大的正数数值增加了ANALYZE所需的时间，但是可能会改善优化器的估计质量。
- 调整此参数可能存在性能劣化的风险，如果某个查询劣化，可以考虑恢复默认的统计信息或者使用plan hint来调整到之前的查询计划。
- 当此guc参数设置为负数时，如果计算的采样样本数大于等于总数据量的2%，且用户表的数据量小于1600000时，ANALYZE所需时间相比guc参数为默认值的时间会有所增加。
- autoanalyze不支持临时表采样方式设置采样大小，采样过程使用参数默认值。
- 当强制使用内存方式计算统计信息时，采样大小受maintenance_work_mem参数限制。
 
**默认值**：100
#### from_collapse_limit
**参数说明**：根据生成的FROM列表的项数来判断优化器是否将把子查询合并到上层查询，如果FROM列表项个数小于等于该参数值，优化器会将子查询合并到上层查询。
**取值范围**：整型，1～INT_MAX。
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
比默认值小的数值将降低规划时间，但是可能生成差的执行计划。
**默认值**：8
#### join_collapse_limit
**参数说明**：根据得出的列表项数来判断优化器是否执行把除FULL JOINS之外的JOIN构造重写到FROM列表中。
**取值范围**：整型，1～INT_MAX。
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- 设置为1会避免任何JOIN重排。这样就使得查询中指定的连接顺序就是实际的连接顺序。查询优化器并不是总能选取最优的连接顺序，高级用户可以选择暂时把这个变量设置为1，然后指定它们需要的连接顺序。
- 比默认值小的数值减少规划时间但也降低了执行计划的质量。
 
**默认值**：8
#### enable_libcomm
**参数说明：**标识DN之间是否通过libcomm通讯。
**取值范围**：布尔型
- on表示使用libcomm执行DN间通讯。
- off表示使用元戎stream执行DN间通讯。
**默认值**：off
#### enable_bloom_filter
**参数说明:**标识是否允许使用BloomFilter优化。
**取值范围：**布尔型
- on表示允许使用BloomFilter优化。
- off表示不允许使用BloomFilter优化。
**默认值：**on
**适用场景**：外表侧同线程包含有HDFS内外表或列存表的HASH JOIN会触发Bloom Filter。
**使用限制**：
1. JOIN类型仅限于INNER JOIN、SEMI JOIN、RIGHT JOIN、RIGHT SEMI JOIN、RIGHT ANTI JOIN、RIGHT ANTI FULL JOIN。
2. JOIN内表侧关联条件：对于HDFS内外表不能为表达式；对于列存表可以为表达式，但仅限于非JOIN层计算的表达式。
3. JOIN外表侧关联条件必须为简单列关联。
4. JOIN内表侧与外表侧关联条件均为简单列关联时，计划层估算必须可以去除1/3以上的数据（仅针对HDFS内外表）。
5. JOIN不能包含null值关联。
6. 数据类型：
   - HDFS内外表字段类型支持SMALLINT、INTEGER、BIGINT、REAL/FLOAT4、DOUBLE PRECISION/FLOAT8、CHAR(n)/CHARACTER(n)/NCHAR(n)、VARCHAR(n)/CHARACTER VARYING(n)、CLOB、TEXT。
   
   - 列存表字段类型支持SMALLINT、INTEGER、BIGINT、OID、"char"、CHAR(n)/CHARACTER(n)/NCHAR(n)、VARCHAR(n)/CHARACTER VARYING(n)、NVARCHAR2(n)、CLOB、TEXT、DATE、TIME、TIMESTAMP、TIMESTAMPTZ，其中字符类型其排序规则必须指定为"C"。
    
 
#### enable_extrapolation_stats
**参数说明:**标识是否允许基于历史统计信息使用推理估算的逻辑。使用该逻辑对于未及时收集统计信息的表可以增大估算准确的可能性，但也存在错误推理导致估算过大的可能性。
**取值范围：**布尔型
- on表示允许基于历史统计信息使用推理估算的逻辑。
- off表示不允许基于历史统计信息使用推理估算的逻辑。
**默认值：**off
#### query_dop
**参数说明:**用户自定义的查询并行度。
**取值范围：**整型，-64-64
- \[1,64\]：打开固定SMP功能，系统会使用固定并行度。

- 0：打开SMP自适应功能，系统会根据资源情况和计划特征动态为每个查询选取\[1,8\]之间（x86平台），\[1,64\]之间（鲲鹏平台）的最优的并行

- \[-64,-1\]：打开SMP自适应功能，并限制自适应选取的最大并行度。
**默认值：**1
#### smp_thread_cost
**参数说明：**在SMP自适应场景下，规划线程并行度时，考虑每个SMP线程应承载的最小估算代价。当算子估算代价较小而并行度较大，使每个SMP线程计算的估算代价小于该阈值时，优化器会自动降低算子的并行度，以避免为低代价算子开启较高并行度浪费系统资源。
**取值范围：**浮点型，0-10000
- 0：关闭SMP线程的估算代价阈值限制，此时并行度的设置不受算子代价的影响。

- (0, 10000\]：设置SMP线程的最小估算代价阈值，设置越大，则低代价算子越趋向于降低并行度。
**默认值：**1000
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
当该参数不为0时，算子的估算代价过小会导致SMP并行度较低。当发现对应情况时，可将该参数设置为0，增大计算并行度。
#### plan_mode_seed
**参数说明**：该参数为调测参数，用于控制优化器通过动态规划算法进行代价估算的最优执行计划，或生成随机的计划。
**参数类型**：USERSET
**取值范围**：整型，-1\~ 2147483647
- 0：通过动态规划算法进行代价估算的最优执行计划。
- -1：由优化器随机生成\[1，2147483647\]范围整型值的随机数，并根据随机数生成随机的执行计划。
- \[1，2147483647\]：由优化器根据指定随机数生成随机的执行计划。
**默认值**：0
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- 当该参数设置为随机执行计划模式时，优化器会生成不同的随机执行计划，该执行计划可能不是最优计划。因此在随机计划模式下，会对查询性能产生影响，所以建议在正常业务操作或运维过程中将该参数保持为默认值0。
- 当该参数不为0时，查询指定的plan hint不会生效。
 
#### fq_query_vdn
**参数说明**：控制任务拉起的actor个数。
**取值范围**：整型，\[0, 256\]
- 0：自适应actor个数。根据扫描和写入的代价动态选取actor个数。
- 1：使用单个actor，退化为单cn模式执行。
- 2-256：使用指定个数的actor执行。
**默认值**：2
#### fq_actor_adapt_type
**参数说明**：控制拉起actor自适应的方式。
**取值范围**：枚举类型
- default：不采用自适应的方式。actor默认规格为4u/16G。
- mem：进行actor规格自适应。保持cpu/mem为1：4的规格，cpu的范围为\[1, 16\]。
**默认值**：mem
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
该参数仅在actor个数自适应的场景下生效，即fq_query_vdn=0。
#### fq_dynamic_actor_cost_threshold
**参数说明**：fq_query_vdn=0时，单cn代价的阈值。超过该阈值时拉起actor。
**取值范围**：浮点型，1\~1e10
**默认值**：200000
![](https://support.huaweicloud.com/sqlref-aura-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
自适应时，选取的actor个数和代价之间不是简单的线性关系，而是梯度不断下降的过程，随着代价的增大，最终会趋向于256。
