Проверить ёмкость параллельных запросов и текущее использование рабочих процессов
PostgreSQLПроизводительностьКоманда
-- 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);Что делает
Показывает лимиты параллельных запросов и сколько параллельных рабочих процессов использует каждый ведущий процесс прямо сейчас; демонстрирует настройку числа рабочих процессов для таблицы.
Когда использовать
Когда аналитические запросы медленнее ожидаемого, в плане 'Workers Planned' > 'Workers Launched' или ядра CPU простаивают.
Внимание
max_parallel_workers ограничен max_worker_processes (требуется перезапуск), и этот пул общий с рабочими процессами логической репликации и другими фоновыми процессами. В OLTP высокое max_parallel_workers_per_gather насыщает CPU при конкурентной нагрузке; каждый рабочий процесс также использует собственный work_mem. Запросы, записывающие данные или блокирующие строки (кроме CREATE TABLE AS / SELECT INTO), курсоры и запросы, вызывающие функции PARALLEL UNSAFE, не получают параллельных планов. ALTER TABLE ... SET (parallel_workers) берёт кратковременную ShareUpdateExclusiveLock.
Связанные материалы
- Найти самые дорогие запросы (pg_stat_statements: общее и среднее время)
- Найти запросы, создающие дисковый I/O, временные файлы и WAL (pg_stat_statements)
- Сбросить статистику pg_stat_statements (полностью или для одного запроса)
- Журналировать планы выполнения медленных запросов через auto_explain
- Детально разобрать план через EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)
- Выявить регрессии планов по queryid (сравнение снимков pg_stat_statements)