У меня есть дорогостоящая функция, которую я использую в запросе, который я хотел бы выполнять параллельно, но postgres, похоже, не хочет этого делать.
В основном просто делаю:
SELECT expensive_func(a, b, c) FROM table;
Разве нельзя добиться этого, чтобы использовать параллельное последовательное сканирование? Или есть какая-то конфигурация, мешающая мне это сделать?
Функция помечена как параллельная безопасная, и максимальное количество параллельных рабочих на сборку установлено соответствующим образом.
Это Postgres 9.6.3
Объявление функции:
CREATE OR REPLACE FUNCTION expensive_func(args...)
RETURNS result
LANGUAGE plpgsql
STABLE
PARALLEL SAFE
AS $$
show dynamic_shared_memory_type? ..
@LaurenzAlbe только что добавил объявление функции. Я не получаю параллельное сканирование только с выбором. Я читал, что для параллельного сканирования требуется предложение where. Я получаю параллельное сканирование с операторами select, в которых есть предложения where. Но разве нет способа указать postgres использовать параллельное сканирование для распараллеливания дорогостоящей функции без предложения where?
@VaoTsun dynamic_shared_memory_type - это posix
Если сканируется вся таблица, стоимость каждой строки составляет parallel_tuple_cost (по умолчанию 0,1). Выбран параллельный план, если вы уменьшите это значение? Что делать, если у вас SET force_parallel_mode=on? Фактическая продолжительность меньше при параллельном плане?





У вас есть параллельное сканирование с
SELECT * FROM "table"? Вы можете показать заявлениеCREATE FUNCTION(точное тело не важно)?