Content

PostgreSQL并行计算算法及参数强制并行度设置方法(post a letter for sb)真没想到

文章摘要

这篇文章主要介绍了通过PostgreSQL的并行优化技术来提升查询性能的配置方法。文章详细描述了如何设置并行度、优化器成本、表级并行等技术手段,以最大化数据库的并行执行能力。通过配置`max_parallel_workers`、`max_parallel_workers_per_gather`、`min_parallel_table_scan_size`、`min_parallel_index_scan_size`等参数,并设置`parallel_tuple_cost`和`parallel_setup_cost`为0,确保了并行计算的高效性。最终的执行计划显示,通过这些优化措施,数据库能够自动并行执行24个WORKER,达到了预期的并行度。这种配置方式显著提升了数据库在处理大规模数据和复杂查询时的性能。

1、总的可开启的WORKER足够大 postgres=# show max_worker_processes ; max_worker_processes ———————- 128 (1 row) 2、所有会话同时执行并行计算的并行度足够大 postgres=# set max_parallel_workers=64; SET 3、单个QUERY中并行计算NODE开启的WORKER=24 postgres=# set max_parallel_workers_per_gather=24; 4、所有表和索引扫描允许并行 postgres=# set min_parallel_table_scan_size=0; postgres=# set min_parallel_index_scan_size=0; 5、并行计算优化器成本设置为0 postgres=# set parallel_tuple_cost=0; postgres=# set parallel_setup_cost=0; 6、设置表级并行度为24 postgres=# alter table pa set (parallel_workers=24); ALTER TABLE 7、效果,强制24并行。 postgres=# explain (analyze) select count(*) from pa; QUERY PLAN ————————————————————————————————————————————- Finalize Aggregate (cost=1615.89..1615.89 rows=1 width=8) (actual time=81.711..81.711 rows=1 loops=1) -> Gather (cost=1615.83..1615.83 rows=24 width=8) (actual time=81.572..90.278 rows=25 loops=1) Workers Planned: 24 Workers Launched: 24 -> Partial Aggregate (cost=1615.83..1615.83 rows=1 width=8) (actual time=58.411..58.411 rows=1 loops=25) -> Parallel Seq Scan on pa (cost=0.00..712.71 rows=416667 width=0) (actual time=0.012..35.428 rows=400000 loops=25) Planning Time: 0.449 ms Execution Time: 90.335 ms (8 rows)