Query Performance in Apache Cloudberry
Apache Cloudberry dynamically eliminates irrelevant partitions in a table and optimally allocates memory for different operators in a query.These enhancements scan less data for a query, accelerate query processing, and support more concurrency.
-
Dynamic partition elimination
In Apache Cloudberry, values available only when a query runs are used to dynamically prune partitions, which improves query processing speed. Enable or deactivate dynamic partition elimination by setting the server configuration parameter
gp_dynamic_partition_pruning
toON
orOFF
; it isON
by default. -
Memory optimizations
Apache Cloudberry allocates memory optimally for different operators in a query and frees and re-allocates memory during the stages of processing a query.
Apache Cloudberry uses GPORCA by default. GPORCA extends the planning and optimization capabilities of the Postgres optimizer.
📄️ 更新统计信息
要获得良好的查询性能,准确的统计信息准确十分重要。通过使用 ANALYZE 语句更新统计信息,可以使查询优化器生成最优的查询计划。Apache Cloudberry 对表进行分析时,相关的数据信息被存储在系统目录表中。如果存储的信息过时了,查询优化器可能会生成低效的查询计划。
📄️ 在 AO 表上使用唯一索引
自 v1.5.0 版本起,你可以在 Apache Cloudberry 的 Append-Optimized (AO) 或 AOCS 表上添加唯一索引。有了唯一索引,Apache Cloudberry 会在将数据插入到 AO 表时,强制检查唯一性约束,从而保证数据的唯一性,同时能够与优化器一起优化特定的查询,从而提高数据库的查询性能。但这也带来的一定的开销用于维护唯一索引,尤其是在插入数据时。
📄️ 自动使用物化视图进行查询优化
自 v1.5.0 版本起,Apache Cloudberry 支持在查询规划阶段自动使用物化视图来计算部分或全部查询(即 AQUMV)。这一功能特别适用于在大表上进行的查询,能显著提高查询处理时间。AQUMV 使用增量物化视图 (IMV),因为当相关表有写入操作时,IMV 通常能保持最新的数据。
📄️ 使用 增量物化视图
本文档介绍 Apache Cloudberry 增量物化视图的使用场景、使用方法、使用限制和注意事项。
📄️ 并行创建 AO/AOCO 表与刷新物化视图
自 v1.5.0 起,Apache Cloudberry 支持使用 CREATE TABLE AS 语句并行创建 Append-Optimized (AO) 表和 Append-Optimized Column Oriented (AOCO) 表,同时支持并行刷新基于该表的物化视图,从而加速建表和物化视图刷新。
📄️ 并行执行查询
本文档介绍 Apache Cloudberry 并行查询的使用场景、使用方法、使用限制和使用该功能的常见问题。Apache Cloudberry 支持并行查询功能,即利用多个 CPU 核心来处理单个查询,以此来提高查询性能。在执行查询过程中,计算节点(包括 SeqScan 算子)的数量会随着数据量变化动态调整。
📄️ 使用聚集下推优化查询
聚集下推 (Aggregation Pushdown) 是使聚集 (Aggregation) 操作的运算更接近数据源的一种优化技术。Apache Cloudberry 支持将聚集运算下推,即将聚集算子提前到连接 (Join) 算子之前进行计算。
📄️ 在 AO 表上使用 IndexScan
Apache Cloudberry 支持对 Append-Optimized 表(简称 AO 表)进行 IndexScan,以此来提升某些场景下的查询效率,例如以下查询:
📄️ 使用 RuntimeFilter 优化 Join 查询
在执行大表连接查询的时候,SQL 优化器常选用 HashJoin 算子来进行运算。HashJoin 基于连接键构建哈希表来进行连接键的匹配,这可能存在内存访问和磁盘瓶颈。RuntimeFilter 是在执行 HashJoin 运算时,实时产生过滤器 (Filter) 的优化技术,可以在执行 HashJoin 前预先对数据进行筛选,更快地执行 HashJoin。在某些场景下,通过 RuntimeFilter 优化能够使执行效率翻倍。
📄️ 使用列级压缩
Apache Cloudberry 支持列级压缩功能,通过对指定列进行数据压缩,可以显著减少存储空间的占用。在某些情况下,列级压缩还能优化查询性能,特别是在处理大规模数据时。