我有一个 PostgreSQL 16 数据库设置,其配置如下:
-- DB Version: 16
-- OS Type: linux
-- DB Type: oltp
-- Total Memory (RAM): 64 GB
-- CPUs num: 32
-- Connections num: 200
-- Data Storage: ssd
show effective_cache_size; --48 GB
show effective_io_concurrency; --200
show huge_pages; --try
show maintenance_work_mem; --4GB
show max_connections; --200
show max_parallel_maintenance_workers; --4
show max_parallel_workers; --32
show max_parallel_workers_per_gather; --4
show max_wal_size; --8GB
show max_worker_processes; --32
show min_wal_size; --2GB
show parallel_setup_cost; --0.1
show random_page_cost; --1.1
show shared_buffers; --16GB
show wal_buffers; --16MB
show work_mem; --256MB
我正在运行一个CREATE TABLE
包含多个连接的查询。有时查询会并行运行,但有时不会。我想确保查询并行运行,或者至少增加它在该特定事务会话中并行运行的机会。如果分配的并行工作器比平时少,那也没关系,因为如果没有并行工作器,查询会非常慢。
下面的配置在一段时间内对我来说效果最好,但它导致了类似于此问题的错误。
ALTER SYSTEM SET maintenance_work_mem = '8GB';
ALTER SYSTEM SET work_mem = '2GB';
ALTER SYSTEM SET effective_io_concurrency = '400';
ALTER SYSTEM SET max_parallel_workers_per_gather = '16';
ALTER SYSTEM SET wal_buffers = '1GB';
我附加了一个选择查询计划以供参考:查询计划。
我想最大化 CPU 利用率(目前低于 10%)和 RAM 利用率(目前低于 30%)。
我知道这force_parallel_mode
已被弃用。如何在 PostgreSQL 中实现查询的一致并行执行?