Параллельные рабочие не используются с индексом BRIN - PullRequest
0 голосов
/ 29 апреля 2020

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

(select
table_p."name",
table_p.id,
count(table.id),
sum(table.views)
    from table
        inner join table_p on table_p.id = table.pageid
        where table.date BETWEEN '2020-03-01' AND '2020-03-31'
            group by table_p.id
            order by table_p.id)
union all
(select
table_p."name",
table_p.id,
count(table.id),
sum(table.views)
    from table
        inner join table_p on table_p.id = table.pageid
        where table.date BETWEEN '2020-02-01' AND '2020-02-29'
            group by table_p.id
            order by table_p.id)
union all ....

Мы решили использовать индекс BRIN из-за на счет нашей таблицы 360 миллионов записей. У нас есть возможность go с B-Tree, если это необходимо.

Теперь по какой-то причине мы видим в анализе объяснения, что для индекса BRIN для «параллельной осведомленности» установлено значение false с двумя работниками быть в списке в плане выхода? Кроме того, мы наблюдаем линейную производительность при разбивке запрашиваемой суммы, то есть один месяц за 5 секунд, четыре месяца за 20 секунд. Я бы предположил, что это означает, что мы выполняем запросы асинхронно, а не параллельно.

Есть ли у кого-нибудь какие-либо идеи относительно того, чего мы могли бы упустить, чтобы по возможности выполнять параллельные запросы? Разве BRIN не работает с параллельными рабочими?

Редактировать: Вот индекс BRIN для "таблицы":

CREATE INDEX table_brin_idx
    ON table USING brin
    (date, teamid, id, pageid, devicetypeid, makeid, modelid)
    TABLESPACE pg_default;

Моя postgres версия PostgreSQL 11.6, скомпилирована Visual C ++ build 1800, 64-bit

Вот ссылка на анализ объяснения, который слишком велик для публикации здесь.

1 Ответ

0 голосов
/ 08 мая 2020

Информация из документации PostgreSQL. В настоящее время параллельное сканирование индекса поддерживается только для индексов btree . Источник: https://www.postgresql.org/docs/11/parallel-plans.html#PARALLEL -SCANS

...