Verificar a capacidade de consulta paralela e o uso atual de workers
PostgreSQLDesempenhoComando
-- Parallel worker pool settings
SELECT name, current_setting(name) AS value
FROM pg_settings
WHERE name IN ('max_worker_processes', 'max_parallel_workers', 'max_parallel_workers_per_gather',
'max_parallel_maintenance_workers', 'parallel_setup_cost', 'parallel_tuple_cost',
'min_parallel_table_scan_size', 'min_parallel_index_scan_size')
ORDER BY name;
-- Queries currently running in parallel and their worker counts
SELECT a.pid AS leader_pid,
count(w.pid) AS workers_running,
current_setting('max_parallel_workers')::int AS max_parallel_workers,
now() - a.query_start AS runtime,
left(a.query, 80) AS query
FROM pg_stat_activity a
JOIN pg_stat_activity w ON w.leader_pid = a.pid AND w.pid <> a.pid
GROUP BY a.pid, a.query_start, a.query
ORDER BY workers_running DESC;
-- Pin / reset the planned worker count for a single table
ALTER TABLE orders SET (parallel_workers = 4);
ALTER TABLE orders RESET (parallel_workers);O que faz
Mostra os limites de consulta paralela e quantos parallel workers cada processo leader está usando agora; demonstra a configuração de número de workers por tabela.
Quando usar
Quando consultas analíticas estão mais lentas que o esperado, o plano mostra 'Workers Planned' > 'Workers Launched' ou núcleos de CPU ficam ociosos.
Atenção
max_parallel_workers é limitado por max_worker_processes (exige restart), e esse pool é compartilhado com os workers de replicação lógica e outros background workers. Em OLTP, um max_parallel_workers_per_gather alto satura a CPU sob concorrência; cada worker também usa seu próprio work_mem. Consultas que gravam dados ou bloqueiam linhas (exceto CREATE TABLE AS / SELECT INTO), cursores e consultas que chamam funções PARALLEL UNSAFE não recebem planos paralelos. ALTER TABLE ... SET (parallel_workers) obtém um breve ShareUpdateExclusiveLock.
Relacionados
- Encontrar as consultas mais caras (pg_stat_statements: tempo total e médio)
- Encontrar as consultas que geram I/O de disco, arquivos temporários e WAL (pg_stat_statements)
- Zerar as estatísticas do pg_stat_statements (todas ou de uma única consulta)
- Registrar os planos de execução de consultas lentas com auto_explain
- Ler um plano em profundidade com EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Detectar regressões de plano por queryid (comparação de snapshots do pg_stat_statements)