Greenplum 查询性能
Posted
技术标签:
【中文标题】Greenplum 查询性能【英文标题】:Greenplum query performance 【发布时间】:2021-05-28 10:25:44 【问题描述】:Greenplum 中有一张 400 GB 的表。以下查询在服务器上有所有空闲资源(4 个数据段)时会花费大量时间
从 tablex 中选择 max(date_key); 表结构如下:
没有PK 无压缩 分布在唯一的密钥上(已确认 按月分区 (date_key) date_key 上的索引【问题讨论】:
没有PK:那是你的问题。 @wildplasser 所以我们必须在 (date_key) 列上创建 PK?对吗? date_key 列的数据类型为 date @wildplasser 有一个主键很重要,但这与这个问题无关。 应该是即时的,在 date_key 列上有一个索引 【参考方案1】:master 接收、解析和优化查询。生成的查询计划是并行的或有针对性的。 Master 将并行查询计划分派到所有 Segment,如图 1 所示。Master 将目标查询计划分派到单个 Segment,如图 2 所示。每个 Segment 负责对自己的数据集执行本地数据库操作。 大多数数据库操作——例如表扫描、连接、聚合和排序——在所有段中并行执行。每个操作都在一个段数据库上执行,与存储在其他段数据库中的数据无关。 某些查询可能只访问单个段上的数据,例如单行 INSERT、UPDATE、DELETE 或 SELECT 操作或过滤表分布键列的查询。在诸如此类的查询中,查询计划不会分派给所有段,而是针对包含受影响或相关行的段。
了解 Greenplum 查询计划 查询计划是Greenplum数据库将执行以产生查询答案的一组操作。计划中的每个节点或步骤都代表一个数据库操作,例如表扫描、连接、聚合或排序。从下到上阅读和执行计划。 除了表扫描、连接等常见的数据库操作之外,Greenplum 数据库还有一种额外的操作类型,称为运动。运动操作涉及在查询处理期间在段之间移动元组。请注意,并非每个查询都需要动作。例如,目标查询计划不需要数据通过互连移动。 为了在查询执行期间实现最大的并行性,Greenplum 将查询计划的工作分成多个切片。切片是分段可以独立工作的计划的一部分。查询计划在计划中发生运动操作的任何地方都被切片,运动的每一侧都有一个切片。 例如,考虑以下涉及两个表之间连接的简单查询: 选择客户,金额 FROM sales JOIN customer USING (cust_id) WHERE dateCol = '04-30-2016';
链接:https://docs.greenplum.org/6-9/admin_guide/query/topics/parallel-proc.html
【讨论】:
以上是关于Greenplum 查询性能的主要内容,如果未能解决你的问题,请参考以下文章