Greenplum 查询性能

问题描述

Greenplum 中有一张 400 GB 的表。以下查询在服务器上拥有所有可用资源(4 个数据段)时花费了大量时间

select max(date_key) from tablex; 表结构如下:

  • 没有PK
  • 无压缩
  • 以唯一密钥分发(已确认
  • 按月分区 (date_key)
  • date_key 上的索引

解决方法

master 接收、解析和优化查询。生成的查询计划要么是并行的,要么是有针对性的。 Master 将并行查询计划调度到所有段,如图 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...