CloudberryDB(四)并行执行

要查看CloudberryDB & Greenplum数据库的并行度配置,可以使用以下几种方法:

方法一:使用`SHOW`命令

在Greenplum数据库中,可以使用`SHOW`命令来查看当前的并行度配置。例如:

```sql

SHOW gp_parallel_degree ;

SHOW max_parallel_workers_per_gather;

```

这条命令将显示当前会话的最大并行工作进程数。

方法二:查询系统表

Greenplum数据库的系统表中存储了有关并行度配置的信息。可以通过查询这些系统表来获取并行度配置。例如:

```sql

SELECT name, setting FROM pg_settings WHERE name LIKE 'max_parallel_workers_per_gather';

```

这条SQL语句将查询`pg_settings`系统表,返回与`max_parallel_workers_per_gather`相关的配置信息。

方法三:查看`postgresql.conf`文件

Greenplum数据库的并行度配置也存储在`postgresql.conf`文件中。可以打开该文件并查找与并行度相关的配置项,例如:

```conf

max_parallel_workers_per_gather = 4

```

方法四:使用`gpconfig`命令

如果你有足够的权限,可以使用`gpconfig`命令来查看当前的并行度配置。例如:

```bash

gpconfig -s max_parallel_workers_per_gather

```

这条命令将显示当前集群中所有节点的`max_parallel_workers_per_gather`配置值。

greenplum 并行执行

Greenplum 是一个基于 PostgreSQL 的大规模并行处理(MPP)数据库,专为大数据分析和数据仓库设计。其核心特性之一就是能够并行执行查询,以提升处理大规模数据时的性能。

以下是 Greenplum 并行执行的关键点:

  1. 架构设计Greenplum 采用无共享(shared-nothing)架构,数据分布在多个节点上,每个节点独立处理自己的数据部分,查询执行时各节点并行工作,最后汇总结果。

  2. 数据分布数据通过分布键(Distribution Key)分散到不同节点,确保数据均匀分布,避免倾斜。查询时,每个节点只处理本地数据,减少数据传输。

  3. 并行查询执行Greenplum 将查询分解为多个并行任务,分配到各节点执行。每个节点独立处理自己的任务,最后将结果汇总返回。

  4. 并行操作类型

•并行扫描:多个节点同时扫描数据。

•并行连接:连接操作在多个节点上并行执行。

•并行聚合:聚合操作分散到多个节点,最后汇总结果。

•并行排序:排序操作在多个节点上并行进行。

  1. 资源管理Greenplum 通过资源队列(Resource Queue)管理查询资源,确保高并发下的资源公平分配,防止单个查询占用过多资源。

  2. 优化器Greenplum 的查询优化器会生成并行执行计划,选择最优的并行策略,如数据分布、连接顺序等,以最大化并行效率。

  3. 性能调优•数据分布优化:选择合适的分发键,确保数据均匀分布。

•分区表:使用分区表减少扫描数据量。

•索引:合理使用索引加速查询。

•统计信息:定期更新统计信息,帮助优化器生成更好的执行计划。

  1. 并行执行示例sql复制EXPLAIN SELECT * FROM large_table WHERE column = 'value';执行计划会显示查询如何并行执行,包括扫描、连接、聚合等操作的并行化。

  2. 并行执行的限制

•数据倾斜:数据分布不均会导致部分节点负载过高。

•资源竞争:高并发时,资源竞争可能影响性能。

•查询复杂度:复杂查询可能难以完全并行化。

总结Greenplum 的并行执行是其高性能的关键,通过数据分布、并行操作和资源管理,能够高效处理大规模数据。合理的数据分布和查询优化是确保并行执行效率的重要因素。

并行参数

在 Greenplum 数据库中,并行执行是其高性能的核心特性之一。为了优化并行执行的性能,Greenplum 提供了多个参数来控制并行度、资源分配和执行行为。

以下是一些常用的 Greenplum 并行参数及其作用:

  1. 并行度控制参数这些参数用于控制查询执行的并行度,即同时使用多少个 Segment 来处理任务。

•gp_resource_manager 指定资源管理器类型,可选值为 group(基于资源组)或 queue(基于资源队列)。

示例:SET gp_resource_manager = 'group';

•gp_resource_group_concurrency 控制资源组的并发查询数。

示例:SET gp_resource_group_concurrency = 20;

•gp_resqueue_priority 启用或禁用查询优先级调度。

示例:SET gp_resqueue_priority = ON;

•gp_max_parallel_workers_per_gather 控制每个 Gather 操作(汇总结果)的最大并行工作进程数。 示例:SET gp_max_parallel_workers_per_gather = 8;

•gp_interconnect_queue_depth 控制节点间数据传输的队列深度,影响并行查询的通信性能。

示例:SET gp_interconnect_queue_depth = 16;

  1. 资源分配参数这些参数用于控制查询执行时的资源分配,如内存、CPU 等。•statement_mem 设置单个查询可以使用的最大内存量。

示例:SET statement_mem = '2GB';

•max_statement_mem 设置所有查询的最大内存总量。

示例:SET max_statement_mem = '10GB';

•gp_vmem_protect_limit 设置每个 Segment 的最大内存使用量,防止内存溢出。

示例:SET gp_vmem_protect_limit = '8GB';

•gp_workfile_limit_files_per_query 控制每个查询可以创建的临时文件数量,用于防止磁盘空间耗尽。

示例:SET gp_workfile_limit_files_per_query = 10000;

  1. 并行执行优化参数这些参数用于优化并行查询的执行行为。

•gp_enable_parallel_append 控制是否启用并行追加(Parallel Append)操作。

示例:SET gp_enable_parallel_append = ON;•gp_enable_parallel_hash 控制是否启用并行哈希连接(Parallel Hash Join)。

示例:SET gp_enable_parallel_hash = ON;

•gp_enable_parallel_sort 控制是否启用并行排序(Parallel Sort)。

示例:SET gp_enable_parallel_sort = ON;

•gp_enable_global_deadlock_detector 控制是否启用全局死锁检测器,用于避免分布式死锁。 示例:SET gp_enable_global_deadlock_detector = ON;

  1. 节点间通信参数这些参数用于优化节点间的数据传输和通信性能。

•gp_interconnect_type 设置节点间通信协议,可选值为 UDP 或 TCP。

示例:SET gp_interconnect_type = 'UDP';•gp_interconnect_snd_queue_depth 控制发送队列的深度,影响数据传输性能。

示例:SET gp_interconnect_snd_queue_depth = 16;

•gp_interconnect_rcv_queue_depth 控制接收队列的深度,影响数据传输性能。

示例:SET gp_interconnect_rcv_queue_depth = 16;

  1. 统计信息与优化器参数这些参数用于控制统计信息和查询优化器的行为。•gp_autostats_mode 控制自动统计信息收集的行为,可选值为 ON_NO_STATS、ON_CHANGE 或 NONE。

示例:SET gp_autostats_mode = 'ON_CHANGE';•gp_enable_predicate_propagation 控制是否启用谓词下推优化。

示例:SET gp_enable_predicate_propagation = ON;•gp_enable_multiphase_agg 控制是否启用多阶段聚合优化。

示例:SET gp_enable_multiphase_agg = ON;

  1. 并行加载参数这些参数用于优化并行数据加载的性能。

•gp_parallel_procs 控制并行加载时的并发进程数。

示例:SET gp_parallel_procs = 16;

•gp_external_max_segs 控制外部表扫描时的最大 Segment 数。

示例:SET gp_external_max_segs = 64;

  1. 其他常用参数

•gp_fts_probe_timeout 设置故障检测服务的超时时间。

示例:SET gp_fts_probe_timeout = '10s';

•gp_segment_connect_timeout 设置 Segment 连接的超时时间。

示例:SET gp_segment_connect_timeout = '180s';

DML并行相关的参数:

  1. **gp_vmem_protect_limit**:这个参数用于控制每个Greenplum节点进程可以使用的内存量。通过调整这个参数,可以影响并行查询的性能和资源分配。

  2. **gp_workfile_limit_per_segment**:这个参数用于限制每个Segment节点上生成的临时工作文件的数量。通过调整这个参数,可以控制并行查询过程中临时文件的使用,从而优化性能。

  3. **gp_max_distributed joins**:这个参数用于限制并行查询中分布式连接的最大数量。通过调整这个参数,可以控制并行查询的复杂度和资源使用。

  4. **gp_parallel_dml**:这个参数用于控制是否启用并行DML操作。将其设置为on可以启用并行DML,从而提高数据插入、更新和删除的性能。

  5. **gp_parallel_tuple_cost**:这个参数用于估计并行查询中每个元组的成本。通过调整这个参数,可以影响查询优化器选择并行执行计划的决策。

  6. `gp_enable_global_deadlock_detector`

  • **作用**: 启用全局死锁检测器,避免在并行执行 DML 时出现死锁。

  • **默认值**: `on`

  • **建议**: 在并发 DML 操作较多时,建议启用此参数。

  1. `gp_enable_fast_sri`
  • **作用**: 启用快速序列化隔离级别(Serializable Isolation Level),提高并行 DML 操作的性能。

  • **默认值**: `off`

  • **建议**: 在需要高并发 DML 操作时,可以尝试启用此参数。

  1. `gp_autostats_mode`
  • **作用**: 控制自动统计信息收集的行为,影响 DML 操作后的统计信息更新。

  • **默认值**: `on_no_stats`

  • **建议**: 根据数据变化频率调整,频繁 DML 操作时建议设置为 `on_change`。

  1. `gp_workfile_compression`
  • **作用**: 控制工作文件是否压缩,影响 DML 操作的磁盘 I/O 性能。

  • **默认值**: `off`

  • **建议**: 在磁盘 I/O 成为瓶颈时,可以启用此参数以减少磁盘空间使用。

  1. `gp_resqueue_priority`
  • **作用**: 设置查询优先级,影响 DML 操作的资源分配。

  • **默认值**: `off`

  • **建议**: 在高并发环境下,可以启用此参数以优先处理重要 DML 操作。

  1. `gp_parallel_retrieve_cursor`
  • **作用**: 控制并行检索游标的数量,影响 DML 操作的并发度。

  • **默认值**: `off`

  • **建议**: 在需要高并发 DML 操作时,可以启用此参数。

  1. `gp_max_packet_size`
  • **作用**: 设置网络传输的最大数据包大小,影响 DML 操作的网络传输性能。

  • **默认值**: `8192`

  • **建议**: 在网络带宽充足的情况下,可以适当增大此参数以提高传输效率。

  1. `gp_segment_connect_timeout`
  • **作用**: 设置段服务器连接超时时间,影响 DML 操作的连接稳定性。

  • **默认值**: `10min`

  • **建议**: 在网络不稳定的环境下,可以适当增大此参数以避免连接超时。

  1. `gp_connections_per_thread`
  • **作用**: 设置每个线程的最大连接数,影响 DML 操作的并发度。

  • **默认值**: `1`

  • **建议**: 在高并发环境下,可以适当增大此参数以提高并发处理能力。

  1. `gp_interconnect_type`
  • **作用**: 设置段服务器之间的互联类型,影响 DML 操作的网络传输性能。

  • **默认值**: `TCP`

  • **建议**: 在高速网络环境下,可以设置为 `UDP` 以提高传输效率。

示例配置

```sql

SET gp_enable_global_deadlock_detector = on;

SET gp_enable_fast_sri = on;

SET gp_autostats_mode = on_change;

SET gp_workfile_compression = on;

SET gp_resqueue_priority = on;

SET gp_parallel_retrieve_cursor = on;

SET gp_max_packet_size = 16384;

SET gp_segment_connect_timeout = '20min';

SET gp_connections_per_thread = 2;

SET gp_interconnect_type = 'UDP';

总结Greenplum 的并行参数涵盖了并行度、资源分配、优化器行为、节点通信等多个方面。通过合理配置这些参数,可以显著提升查询性能和系统稳定性。在实际使用中,建议根据具体的工作负载和硬件资源进行调整,并通过测试验证参数设置的效果。

  • 并行度配置可以在系统级别、数据库级别或会话级别进行设置。使用上述方法查看的是当前会话或系统的并行度配置。

  • 如果你在多个节点上运行Greenplum集群,确保所有节点的并行度配置一致,以避免潜在的性能问题。

  • 并行度配置会影响系统的资源消耗和性能。根据实际需求和硬件资源合理设置并行度。

通过以上方法,你可以查看Greenplum数据库的并行度配置,并根据需要进行调整。

相关推荐
米诺zuo3 小时前
datagrip配置新的数据库
数据库
火星MARK3 小时前
RAID详解
数据库·oracle
JAVA学习通3 小时前
Spring AI与DeepSeek实战:打造企业级智能体
数据库
安审若无4 小时前
Oracle 打补丁指南
数据库·oracle
回家路上绕了弯4 小时前
外卖员重复抢单?从技术到运营的全链路解决方案
分布式·后端
樱花的浪漫5 小时前
Cuda reduce算子实现与优化
数据库·人工智能·深度学习·神经网络·机器学习·自然语言处理
啊森要自信5 小时前
【MySQL 数据库】MySQL用户管理
android·c语言·开发语言·数据库·mysql
kkkkk0211065 小时前
Redis八股
数据库·redis·缓存
忍冬行者5 小时前
Kafka 概念与部署手册
分布式·kafka
深蓝电商API5 小时前
爬虫+Redis:如何实现分布式去重与任务队列?
redis·分布式·爬虫·python