本文档介绍了系统配置参数中 查询调优类别的相关参数。
注意!
为确保系统稳定与安全,请务必谨慎手动修改相关参数。
查询调优参数分类如下:
此部分配置参数提供了影响查询优化器选择查询计划的原始方法。
如果优化器为特定的查询选择的缺省规划并不是最优,那么我们就可以通过使用这些配置参数强制优化器选择一个更好的规划来暂时解决这个问题。
提高优化器选择的计划质量的更好的方式包括:调整规划器的代价参数(见下文)、手工运行 ANALYZE
、增加 default_statistics_target
配置参数的值以及使用 ALTER TABLE SET STATISTICS
语句增加为特定列收集的统计信息量。
启用或禁用 Postgres 查询优化器(规划器)使用位图扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用组聚集计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用哈希聚合计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用哈希连接计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)仅使用索引扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用索引扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
是否开启 MARS2 aggscan。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或者禁用 Postgres 查询优化器(规划器)使用物化。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用合并连接计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用嵌套循环连接计划。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用并行追加计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)对并行哈希使用哈希连接计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)从查询计划中减少分区表的分区的能力。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用面向分区的分组或聚集。
GROUP BY
子句不包括分区键,那么只有部分聚集能够以基于每个分区的方式执行。同时必须稍后再执行 finalization。off
。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用面向分区的连接。
off
。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用顺序扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用 Postgres 查询优化器(规划器)使用显式排序步骤。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用Postgres查询优化器(规划器)使用元组标识符(TID)扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用两阶段聚合以计算单个不同限定的聚合。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用三阶段聚合和连接以计算不同限定的聚合。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用为访问单个 Segment 上的数据的查询调度目标查询计划.
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;system;restart |
当设置为 on
时,Postgres 查询优化器(规划器)计划单行插入,以便将它们直接发送到正确的 Segment 实例(无需 motion 操作)。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用使用两阶段或三阶段并行聚合计划 Postgres 查询优化器。
gp_enable_multiphase_agg
关闭,则禁用 gp_enable_agg_distinct
和 gp_enable_agg_distinct_pruning
。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
为 SELECT DISTINCT
查询启用两阶段重复删除(不是 SELECT COUNT(DISTINCT)
)。
SORT DISTINCT
计划节点。SORT DISTINCT
比通过互连发送行的成本代价低得多。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
如果表没有统计信息,则允许 Greenplum GPORCA 优化器和 Postgres 查询优化器(规划器)使用表的估计大小(pg_relation_size
函数)。
ANALZYE ROOTPARTITION
收集根分区的统计信息。详见 ANALYZE。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
在排序时启用删除重复项。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
在排序时启用 LIMIT
操作。 当计划至多需要行的第一个 limit_number
时,排序更有效。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
抑制连接(Join)子句中的选择性。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
抑制相同基础表中子句中的选择性。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
为必须扫描的索引数据量设置一个最小值(BLOCKS),扫描的索引数据量超过这一个值时才会考虑使用并行扫描。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 512 | 0 ~ (INT_MAX/3) | master;session;reload |
为必须扫描的表数据量设置一个最小值(BLOCKS),扫描的表数据量超过这一个值才会考虑使用并行扫描。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 8192 | 0 ~ (INT_MAX/3) | master;session;reload |
允许领导者进程执行 Gather 和 Gather Merge 节点之下的查询计划而不是等待工作者进程。
off
会降低工作者由于领导者读取元组速度不够快而被阻塞的可能性,但是要求领导者在产生第一个元组之前等待工作者进程启动。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;system;restart |
注意!
请勿调整此部分参数。因为它们的变动会影响 YMatrix 数据库硬件配置及典型的工作负载(workloads)。所有这些参数都是相关的,仅改变其中一个的值而不顾其连带影响会导致查询性能损耗。
设置 Postgres 优化器(规划器)对一次索引扫描中处理每一个索引项的代价估计。这是作为顺序页面提取代价的一部分来衡量的。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.005 | 0 ~ DBL_MAX | master;session;reload |
设置 Postgres 优化器(规划器)对于 WHERE
语句中处理每个操作符的代价估计。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.0025 | 0 ~ DBL_MAX | master;session;reload |
设置 Postgres 优化器(规划器)对一次查询中处理每一行(元组)的代价估计。这是作为顺序页面提取代价的一部分来衡量的。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.01 | 0 ~ DBL_MAX | master;session;reload |
设置 Postgres 查询优化器(规划器)对将被检索的一个游标的行的比例的估计。
1.0
,游标将和普通查询完全一样地被规划,只考虑总估计时间而不考虑前几行会被多快地返回。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.1 | 0.0 ~ 1.0 | master;session;reload |
设置 Postgres 优化器(规划器)对一个单一查询可用的有效磁盘缓冲区尺寸(BLOCKS)的假设。
gpconfig
工具和 SHOW
命令以 “MB” 或 “kB” 为单位显示有效的高速缓存大小值。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 524288 | 1 ~ INT_MAX | master;session;reload |
设置优化器对从 AO 表中非顺序获取磁盘页面的成本的估计。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 40.0 | 0 ~ DBL_MAX | master;session;reload |
设置优化器对从压缩的 AO 表中非顺序获取磁盘页面的成本的估计。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 400.0 | 0 ~ DBL_MAX | master;session;reload |
设置 Motion 运算符的 Postgres 查询优化器(规划器)成本估算,以将行从一个 Segment 传输到另一个 Segment,以连续页面提取成本的小数部分来衡量。
0
,则使用的值是 cpu_tuple_cost
值的两倍。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.0 | 0 ~ DBL_MAX | master;session;reload |
设置 Postgres 查询优化器(规划器)在其成本和大小估计中假设的 Primary 实例数。
0
,则使用的值是 Primary 的实际数量。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | master;session;reload |
设置 Postgres 优化器(规划器)对启动并行工作者进程的代价估计。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 1000.0 | 0 ~ INT_MAX | master;session;reload |
设置 Postgres 优化器(规划器)对于从一个并行工作者进程传递一个元组给另一个进程的代价估计。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.1 | 0 ~ DBL_MAX | master;session;reload |
设置 Postgres 查询优化器(规划器)的非顺序读取磁盘页面的成本估计。
seq_page_cost
)将导致系统更倾向于顺序扫描,较低的值将导致系统更倾向于索引扫描。你可以一起提高或降低这两个参数来改变磁盘 I/O 代价相对于 CPU 代价的重要性。random_page_cost
来更好的反映随机存储读取的真正代价。相应地,如果你的数据可以完全放在高速缓存中(例如当数据库小于服务器总内存时),降低 random_page_cost
可能是合适的。为具有很低的随机读取代价的存储(例如固态驱动器)采用较低的 random_page_cost
值可能更好。注意!
虽然允许你将random_page_cost
设置的比seq_page_cost
小,但是物理上的实际情况并不受此影响。当所有数据库都位于内存中时,两者设置为相等是非常合理的,因为在此情况下,乱序抓取并不比顺序抓取开销更大。同样,在缓冲率很高的数据库上,你应当相对于 CPU 开销同时降低这两个值,因为获取内存中的页比通常情况下的开销小许多。如果数据库整个缓存在 RAM 中,将它们设置为相等是有意义的,因为在此情况下,不按顺序访问页面是没有的额外代价的。同样,在一个高度缓存化的数据库中,你应该相对于 CPU 参数降低这两个值,因为获取一个已经在 RAM 中的页面的代价要远小于通常情况下的代价。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 4.0 | 0 ~ DBL_MAX | master;session;reload |
设置 Postgres 查询优化器(规划器)计算一次顺序磁盘页面抓取的开销。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 1.0 | 0 ~ DBL_MAX | master;session;reload |
GEQO 是一个使用探索式搜索算法进行查询规划的算法。它可以降低复杂查询(需要进行多表连接的查询)的规划时间,但是代价是其产生的计划某些时候会不如使用穷举搜索算法找到的计划。
允许或禁止遗传查询优化。
geqo_threshold
变量提供了对 GEQO 更细粒度的空值。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
控制 GEQO 里规划时间和查询规划的有效性之间的平衡。
geqo_effort
实际并不直接做任何事情;它只是被用来计算其他影响 GEQO 行为的变量的默认值。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | master;session;reload |
控制 GEQO 使用的子代数目。
1
,有用的值范围和池大小相同。0
(默认值),那么 YMatrix 将基于 geqo_pool_size
选取合适的值。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | master;session;reload |
控制 GEQO 使用的池尺寸,它就是遗传种群中的个体数目。
geqo_effort
和查询中表的数量选择一个合适的值。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | master;session;reload |
控制 GEQO 使用的随机数生成器的初始值,随机数生成器用于在连接顺序搜索空间中选择随机路径。
0
(默认值)到 1
。变化该值会改变被探索的连接路径集合,并且可能导致找到一个更好或更差的路径。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.0 | 0.0 ~ 1.0 | master;session;reload |
控制 GEQO 使用的选择偏好。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 1.0 | 0.0 ~ 100.0 | master;session;reload |
只有当涉及的 FROM
项数量至少有此参数值的时候,才使用遗传查询优化(注意一个 FULL OUTER JOIN
只被计为一个 FROM
项)。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 12 | 2 ~ INT_MAX | master;session;reload |
这部分参数用于调整 ANALYZE
操作采样的数据量。调整这部分参数会影响整个系统的统计数据收集。你可使用 ALTER TABLE SET STATISTICS
子句配置某些特定表和列的统计数据收集。
为没有通过 ALTER TABLE SET STATISTICS
设置列相关目标的表列设置默认统计目标。
ANALYZE
的时间,但是会改善 Postgres 查询优化器的估计质量。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 100 | 0 ~ 10000 | master;session;reload |
在排序时启用 LIMIT
操作。 当计划至多需要行的第一个 limit_number
时,排序更有效。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用两阶段聚合以计算单个不同限定的聚合。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用三阶段聚合和连接以计算不同限定的聚合。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用或禁用使用两阶段或三阶段并行聚合计划 Postgres 查询优化器。
gp_enable_multiphase_agg
关闭,则禁用 gp_enable_agg_distinct
和 gp_enable_agg_distinct_pruning
。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
为 SELECT DISTINCT
查询启用两阶段重复删除(不是 SELECT COUNT(DISTINCT)
)。
SORT DISTINCT
计划节点。SORT DISTINCT
比通过互连发送行的成本代价低得多。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
指定在哈希聚合或哈希连接操作溢出到磁盘时创建的临时文件是否压缩。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
提取投影字段并将 agg 评估到单独的结果节点。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;session;reload |
如果得出的列表中不超过这么多项,那么 Postgres 优化器(规划器)将把显式 JOIN
(除了 FULL JOIN
)结构重写到 FROM
项列表中。
from_collapse_limit
相同,适合大多数情况。1
可防止对内部 JOIN 进行任何的重排序。因此查询中指定的显式连接顺序就是关系被连接的实际顺序。1
和 from_collapse_limit
之间的值可能有助于将规划时间与所选计划的质量进行权衡(更高的值会产生更好的计划)。geqo_threshold
或更大,可能触发使用 GEQO 规划器,从而产生非最优计划。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 20 | 1 ~ INT_MAX | master;session;reload |
在外连接上启用 NULL 测试的选择性。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
设置 HashJoin 操作使用的哈希表的目标密度。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 5 | 1 ~ 25 | master;session;reload |
指定在哈希聚合或哈希连接操作溢出到磁盘时创建的临时文件是否压缩。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
控制查询 Postgres 优化器(规划器)对表约束的使用,以优化查询。
on
(对所有表检查约束)、off
(从不检查约束)和 partition
(只对继承的子表和 UNION ALL
子查询检查约束)。 partition
是默认设置。它通常与传统的继承树一起使用来提高性能。CHECK
约束,并且忽略那些条件与约束相矛盾的扫描表。例如:=# CREATE TABLE parent(key integer, ...);
=# CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
=# CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
...
=# SELECT * FROM parent WHERE key = 2400;
在启用约束排除时,这个 SELECT
将完全不会扫描 child1000
,从而提高性能。
enable_partition_pruning
)控制的)数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | on | true / false / yes / no / 1 / 0 / on / off / partition | master;session;reload |
允许为测试目的使用并行查询,即便是并不期望在性能上得到效益。
off
(只在期望改进性能时才使用并行模式)、on
(只要查询被认为是安全的,就强制使用并行查询)以及 regress
(和 on
相似,但是有如下文所解释的额外行为改变)。on
会在任何一个对于并行查询安全的查询计划顶端增加一个 Gather 节点,这样查询会在一个并行工作者内部运行。即便当一个并行工作者不可用或者不能被使用,启动子事务等在并行查询上下文中被禁止的操作也将被禁止,除非优化器相信这样做会导致查询失败(则不会禁止)。当这个选项被设置时如果出现失败或者意料之外的结果,查询使用的某些函数可能需要被标记为 PARALLEL UNSAFE
(或者 PARALLEL RESTRICTED
)。regress
具有设置成 on
所有相同的效果,外加一些有助于自动回归测试的额外的效果。一般来说,来自于一个并行工作者的消息会有一个提示行指出这一点,但是设置为 regress
会消除这一行,这样输出就和非并行执行完全一样。同样,被这个设置加到计划上的 Gather 节点在 EXPLAIN
输出终会被隐藏起来,这样产生的输出匹配设置为 off
时产生的输出。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | off | on / off / regress | master;session;reload |
如果生成的 FROM
列表不超过此参数值,Postgres 查询优化器(规划器)会将子查询合并到上层查询中。
geqo_threshold
或更大,可能触发使用 GEQO 规划器,从而产生非最优计划。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 20 | 1 ~ INT_MAX | master;session;reload |
启用后,Postgres 查询优化器(规划器)会在表格在其分布键列上连接的情况下将查询谓词应用于两个表表达式。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
指定查询执行计划的最大未压缩总大小乘以计划中的 Motion 运算符(切片)数。
0
表示不监视计划的大小。200
是 200kB
。 值 1GB
与 1024MB
或 1048576kB
相同。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ (INT_MAX/1024) | master;session;superuser |
在 Postgres 查询优化器(规划器)规划父表的查询时,允许使用子表中的统计信息。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
启用后,允许 Postgres 查询优化器(规划器)使用存储在系统目录中的外键信息来优化外键和主键之间的连接。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
指定可以由查询生成的最大切片数(在 Segment 实例上执行的查询计划的部分)。
UNION
或 UNION ALL
运算符的查询会生成大量切片。你可以在查询上运行 EXPLAIN ANALYZE
以查看查询的切片统计信息。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | master;session;reload |
准备语句(显式准备或隐式生成的,例如 PL / pgSQL)可以使用自定义或通用计划执行。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | auto | auto / force_custom_plan / force_generic_plan | master;session;reload |
YMatrix 是否允许使用 JIT 编译。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
设置激活 JIT(Just-in-Time)编译的查询代价,如果查询代价超过这个值就会激活 JIT 编译。
-1
会禁用 JIT 编译。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 100000 | -1 ~ DBL_MAX | master;session;reload |
如果 LLVM 具有所需的功能,请向 GDB 注册生成的函数。这使得调试更容易。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload;superuser |
将生成的 LLVM IR 写入文件系统,在 data_directory
中。
SET
权限的用户才能更改此设置。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload;superuser |
当激活 JIT 编译时,允许对表达式进行 JIT 编译。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
设置 JIT 编译尝试内联函数和操作符的查询代价阈值。
jit_above_cost
是没有意义的。-1
会禁用内联。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 500000 | -1 ~ DBL_MAX | master;session;reload |
设置 JIT 编译应用优化的查询代价阈值。
jit_above_cost
是没有意义的,并且将它设置成大于 jit_inline_above_cost
也未必有益。-1
会禁用开销较大的优化。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 500000 | -1 ~ DBL_MAX | master;session;reload |
如果 LLVM 具有所需的功能,则发出允许 perf
命令分析 JIT 生成的函数所需的数据。
~/.debug/jit/
。如果你设置并加载了环境变量 JITDUMPDIR
,它将改为写入 JITDUMPDIR/debug/jit
。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload;superuser |
当激活 JIT 编译时,允许 JIT 对于元组变形的编译。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
如果表没有统计信息,则允许 ORCA 优化器和 Postgres 查询优化器使用表的估计大小(pg_relation_size
函数)。
ANALZYE ROOTPARTITION
收集根分区的统计信息。详见 ANALYZE。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
运行 SQL 查询时启用或禁用 GPORCA。
on
。如果禁用 GPORCA,YMatrix 数据库将仅使用 Postgres 查询优化器。optimizer
参数。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
对于分区表,控制在表上运行 ANALYZE
命令时是否需要 ROOTPARTITION
关键字来收集根分区统计信息。
on
,即 ANALYZE
命令可以在不使用 ROOTPARTITION
关键字的情况下收集根分区统计信息。在根分区上运行 ANALYZE
时,或者在分区表的子叶子分区上运行 ANALYZE
并且其他子叶子分区具有统计信息时,将收集根分区统计信息。off
时,你必须运行 ANALZYE ROOTPARTITION
以收集根分区统计信息。optimizer
的值为 on
(默认值)时,此参数的值也应该为 on
。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;system;restart |
启用 GPORCA(默认值)并处理包含具有常量数组的谓词的查询时,optimizer_array_expansion_threshold
参数会根据数组中的常量数限制优化过程。
IN
子句的查询时,GPORCA 在查询优化期间不会将谓词转换为其析取范式,以减少优化时间消耗更少的内存。查询处理的差异可以在查询 EXPLAIN
计划的 IN
子句的过滤条件中看到。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 100 | 0 ~ INT_MAX | master;session;reload |
控制是否可以使用 SET
,RESET
命令或 YMatrix 数据库实用程序 gpconfig
更改服务器配置参数optimizer
。
optimizer_control
参数值,则用户可以设置优化程序参数。optimizer_control
参数值为 off
,则无法更改优化程序参数。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;system;restart;superuser |
启用 GPORCA(默认值)时,此参数控制 GPORCA 选择用于位图扫描的成本模型,该位图扫描与位图索引或 AO 表上的 btree 索引一起使用。
legacy
- 保留 GPORCA 在 Greenplum 数据库版本 6.13 和更早版本中使用的 calibrated
代价模型calibrated
- 改进索引的代价估算experimental
- 为未来的实验代价模型保留;目前相当于 calibrated
模型calibrated
更有可能选择具有嵌套循环连接(Nested Loop Joins)而不是散列连接(Hash Joins)的更快位图索引。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | calibrated | legacy / calibrated / experimental | master;session;reload |
启用 GPORCA(默认值)时,此参数控制为公用表表达式(CTE)查询(包含 WHERE
子句的查询)执行的内联量。
0
禁用内联。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | master;session;reload |
当启用 Greenplum 的 ORCA 优化器(默认)且此参数为 on
(默认)时,GPORCA 会派生统计数据,使其能够更准确地估计在动态分区消除期间要扫描的行数。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用 GPORCA(默认设置)时,此参数控制是否在查询优化期间启用连接关联变换。
off
,仅启用用于分析连接顺序的 GPORCA 动态编程算法。on
,GPORCA 可以在查询优化期间使用关联变换。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
当启用 GPORCA(默认)且此参数为 on
(默认)时,GPORCA 会尝试运行 DML 命令,例如 INSERT
、UPDATE
和 DELETE
。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
当启用 GPORCA(默认)并且此参数为 on(默认)时,GPORCA 可以为 B-tree 索引生成 index-only 扫描计划类型。
off
)时,GPORCA 不会生成仅索引扫描计划类型。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
当启用 GPORCA 时(默认),此参数允许 GPORCA 支持多个不同的合格聚合,例如 SELECT count(DISTINCT a),sum(DISTINCT b) FROM foo
。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
启用 GPORCA(默认值)时,此参数会影响 GPORCA 在生成 3 阶段聚合计划时考虑的查询计划备选方案。
on
时,默认情况下,GPORCA 仅考虑 3 阶段聚合计划, 其中中间聚合使用 GROUP BY
和 DISTINCT
列进行分发,以减少处理偏斜的影响。off
,GPORCA 还可以考虑使用 GROUP BY
列进行分发的计划。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
对于默认设置,启用 GPORCA 且此参数为 on,GPORCA 在生成此类计划备选项时为标量不同的合格聚合选择 3 阶段聚合计划。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
对于默认设置,GPORCA 已启用且此参数为 on,GPORCA 会在生成此类计划备选项时选择具有多级聚合的计划。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
该值是一个优化提示,用于限制在查询优化期间探索的连接关联性和连接可交换性转换的数量。
18
是 GPORCA 在优化期间 n-ary 连接运算符具有超过 18 个子节点时停止探索连接关联性和连接交换变换的优化提示。optimizer_join_order
参数设置为 query
或 greedy
时,此参数无效。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 18 | 0 ~ INT_MAX | segments;system;reload |
启用 GPORCA 时,此参数通过指定要评估的连接排序备选类型来设置查询优化期间的连接排序的优化级别。
query
- 使用查询中指定的连接顺序。greedy
- 根据连接中关系的最小基数,计算查询中指定的连接顺序和备选方案。exhaustive
- 应用转换规则以查找和评估所有连接排序备选方案。exhaustive
。将此参数设置为 query
或 greedy
可以生成次优查询计划。但是,如果管理员确信使用 query
或 greedy
设置生成了令人满意的计划,则可以通过将参数设置为较低的优化级别来提高查询优化时间。query
或 greedy
会覆盖 optimizer_join_order_threshold
和 optimizer_join_arity_for_associativity_commutativity
参数。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | exhaustive | exhaustive / greedy / query | master;session;reload |
启用 GPORCA(默认设置)时,此参数设置 GPORCA 将使用基于动态编程的连接排序算法的最大连接子数。
optimizer_join_query
参数设置为 query
或 greedy
时,此参数无效。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 10 | 0 ~ 12 | master;session;reload |
设置 YMatrix 数据库 Master 上 GPORCA 在查询优化期间用于缓存查询元数据(优化数据)的最大内存量(KB)。
optimizer_metadata_caching
。16384(16MB)
。这是通过性能分析确定的最佳值。KB
,MB
或 GB
的值。默认单位是 KB
。例如,值 16384
是 16384KB
。值 1GB
与 1024MB
或 1048576KB
相同。0
,则不限制高速缓存的大小。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 16384 | 0 ~ INT_MAX | master;session;reload |
启用 GPORCA(默认值)时,此参数指定 GPORCA 在查询优化期间是否在 YMatrix 数据库 Master 上的内存中缓存查询元数据(优化数据)。
off
,则 GPORCA 在查询优化期间不会缓存元数据。optimizer_mdcache_size
控制查询元数据缓存的大小。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用 GPORCA(默认值)时,optimizer_parallel_union
控制包含 UNION
或 UNION ALL
子句的查询的并行化数量。
off
时,默认 GPORCA 会生成一个查询计划,其中 APPEND(UNION)
运算符的每个子项与 APPEND
运算符位于同一个切片中。APPEND(UNION)
运算符下。 在查询执行期间,子项和父 APPEND
运算符位于不同的切片上,允许 APPEND(UNION)
运算符的子项在 Segment 实例上并行执行。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
当启用 GPORCA(默认)时,在查询优化期间,GPORCA 会惩罚尝试广播超过此参数指定值的计划的代价。
100K
行(默认值),则任何超过 100K 行的广播都会受到严重惩罚。0
时,GPORCA 将此广播阈值设置为无限制并且从不惩罚广播动作。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 100000 | 0 ~ INT_MAX | master;session;reload |
启用 GPORCA 时(默认),此参数允许 GPORCA 惩罚 HashJoin 的 Segment 成本,将倾斜的 Redistribute Motion 作为子节点,以在查询优化期间支持 Broadcast Motion。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
启用 GPORCA(默认设置)时,此参数可以为查询的各种优化阶段记录 GPORCA 查询优化统计信息。
off
,请勿记录优化统计信息。on
, 并且必须将参数 client_min_messages
设置为 log
。set optimizer_print_optimization_stats = on;
set client_min_messages = 'log';
EXPLAIN
或 EXPLAIN ANALYZE
命令记录信息。数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;session;reload |
启用 GPORCA(默认值)时,optimizer_sort_factor
控制在查询优化期间应用于排序操作的成本因子。
1
指定默认排序成本因子。2.0
将成本因子设置为默认值的两倍,值 0.5
将因子设置为默认值的一半。数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 1.0 | 0.0 ~ DBL_MAX | master;session;reload |
是否启用 Runtime Filter。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | master;session;reload |
当连接外表行数与内表行数的比值小于该值的时候,不触发 Runtime Filter。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 10 | 0 ~ (INT_MAX/2) | master;session;reload |
每个查询中使用 Runtime Filter 的次数上限。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 4 | 0 ~ (INT_MAX/2) | master;session;reload |
当连接内表的行数大于该值,不触发 Runtime Filter。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 2000000 | 0 ~ (INT_MAX/2) | master;session;reload |
当连接外表的行数小于该值,不触发 Runtime Filter。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 3 | 0 ~ (INT_MAX/2) | master;session;reload |
当连接外表的行数小于该值,不触发 Runtime Filter。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 500000 | 0 ~ (INT_MAX/2) | master;session;reload |
当连接内表扫描行数与满足连接条件的行数的比值小于该值时,不触发 Runtime Filter。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 25 | 0 ~ (INT_MAX/2) | master;session;reload |
是否开启向量化执行引擎。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用组聚集计划。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用哈希聚集计划。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用追加计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用 Motion 计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用带有显式预排序的聚集计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎的根执行器。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用排序计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用严格模式。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | false | master;session;reload |
是否启用向量化执行引擎使用回退表达式。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用限制计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用窗口聚集计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | false | master;session;reload |
是否启用向量化执行引擎使用子查询扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用哈希连接计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否为向量化哈希连接启用高级哈希图。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用聚集扫描计划类型。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |
是否启用向量化执行引擎使用索引扫描。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | true | master;session;reload |