为什么GPDB成本估算不考虑段数
Why does GPDB not consider the number of segments in cost estimation
无论是什么版本的GPDB开源代码,在成本评估中都不考虑段数,只在向QD返回explain结果时做了一个简单的处理,让结果更加清晰。
在 Greenplum 中,您的查询在所有段上并行执行,因此所有段都会产生成本。然而,将成本数乘以段数似乎没有帮助,这将在不同的 Greenplum 集群上为您提供具有不同成本数的相同查询计划。
实际上,Greenplum 在规划时使用的是段数。统计信息存储在 master 中,Greenplum 将使用此全局信息在每个段中本地推断统计信息。
下面列出了一些示例:
- 函数
adjust_reloptinfo
(大背景请参考PR:https://github.com/greenplum-db/gpdb/pull/10676)
- 函数
estimate_num_groups_on_segment
是在给定集群大小和全局不同数量的情况下估计局部不同值
- Motion 的成本模型考虑了集群大小:
cdbpath_cost_motion
- ...
无论是什么版本的GPDB开源代码,在成本评估中都不考虑段数,只在向QD返回explain结果时做了一个简单的处理,让结果更加清晰。
在 Greenplum 中,您的查询在所有段上并行执行,因此所有段都会产生成本。然而,将成本数乘以段数似乎没有帮助,这将在不同的 Greenplum 集群上为您提供具有不同成本数的相同查询计划。
实际上,Greenplum 在规划时使用的是段数。统计信息存储在 master 中,Greenplum 将使用此全局信息在每个段中本地推断统计信息。
下面列出了一些示例:
- 函数
adjust_reloptinfo
(大背景请参考PR:https://github.com/greenplum-db/gpdb/pull/10676) - 函数
estimate_num_groups_on_segment
是在给定集群大小和全局不同数量的情况下估计局部不同值 - Motion 的成本模型考虑了集群大小:
cdbpath_cost_motion
- ...