Comprobar la capacidad de consultas paralelas y el uso actual de workers
PostgreSQLRendimientoComando
-- 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);Qué hace
Muestra los límites de las consultas paralelas y cuántos parallel workers usa en este momento cada proceso leader; ilustra el ajuste del número de workers por tabla.
Cuándo usarlo
Cuando las consultas analíticas son más lentas de lo esperado, el plan muestra 'Workers Planned' > 'Workers Launched' o hay núcleos de CPU ociosos.
Precaución
max_parallel_workers está limitado por max_worker_processes (requiere reinicio), y ese pool se comparte con los workers de replicación lógica y otros background workers. En OLTP, un max_parallel_workers_per_gather alto satura la CPU con concurrencia; además, cada worker usa su propio work_mem. Las consultas que escriben datos o bloquean filas (salvo CREATE TABLE AS / SELECT INTO), los cursores y las consultas que llaman a funciones PARALLEL UNSAFE no obtienen planes paralelos. ALTER TABLE ... SET (parallel_workers) toma un breve ShareUpdateExclusiveLock.
Relacionado
- Encontrar las consultas más costosas (pg_stat_statements: tiempo total y medio)
- Encontrar las consultas que generan I/O de disco, archivos temporales y WAL (pg_stat_statements)
- Restablecer las estadísticas de pg_stat_statements (todas o una sola consulta)
- Registrar los planes de ejecución de las consultas lentas con auto_explain
- Leer un plan en profundidad con EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Detectar regresiones de plan por queryid (comparación de snapshots de pg_stat_statements)