Понимание того, сколько параллельных рабочих остается из рабочего пула между сеансами для PostgreSQL параллельных запросов? - PullRequest
1 голос
/ 27 февраля 2020

Допустим, у меня есть пул из 4 параллельных рабочих в моей конфигурации PostgreSQL базы данных. У меня также есть 2 сеанса.

В сеансе # 1 в данный момент выполняется SQL, и мой планировщик произвольно выбирает для запуска 2 рабочих для этого запроса.

Итак, в сеансе # 2 как я могу узнать, что мой резерв рабочих сократился на 2?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Можно подсчитать параллельные рабочие бэкэнды:

SELECT current_setting('max_parallel_workers')::integer AS max_workers,
       count(*) AS active_workers
FROM pg_stat_activity
WHERE backend_type = 'parallel worker';
0 голосов
/ 28 февраля 2020

Внутренне, Postgres отслеживает, сколько параллельных рабочих активно с двумя переменными с именами parallel_register_count и parallel_terminate_count. Разница между ними заключается в количестве активных параллельных работников. См. Комментарий в исходном коде.

Перед регистрацией нового параллельного работника это число сверяется с настройкой max_parallel_workers в исходном коде здесь .

К сожалению, я не знаю ни одного прямого способа раскрыть эту информацию пользователю.

Вы увидите влияние исчерпанного лимита в планах запросов. Вы можете попробовать EXPLAIN ANALYZE с запросом SELECT для большой таблицы, которая обычно распараллеливается. Вы бы увидели меньше рабочих, чем планировалось. Руководство:

Общее количество фоновых рабочих, которые могут существовать в любое время, ограничено как max_worker_processes и max_parallel_workers, Следовательно, параллельный запрос может выполняться с меньшим количеством работников, чем планировалось, или вообще без работников.

...