Требуется параллельное добавление к внешним таблицам в PostgreSQL

Мы разработали fdw на основе postgres_fdw, который реализует поиск в больших репозиториях (большие данные), сохраняя данные в сжатом виде. Мы пытаемся использовать концепцию таблиц разделов postgres, чтобы мы могли параллельно выполнять поиск по многим разделам одновременно. Нам нужно «Параллельное добавление» для оберток внешних данных.

Кто-нибудь знает, будет ли это адресовано в Postgres 11?

Если мой запрос приводит к поиску в локальных разделах, postgres использует параллелизм, но если он приводит к внешнему сканированию, это не так.

Локальные разделы:

explain select * from precio where fecha >= '2017-01-20' and fecha <= '2017-01-21' and plusalesprice < 1

Gather (cost=1000.00..969527.35 rows=81568 width=60)
 Workers Planned: 2
 -> Parallel Append  (cost=0.00..960370.55 rows=33986 width=60)
    -> Parallel Seq Scan on precio_20170121  (cost=0.00..589086.00 rows=19293 width=60)
       Filter: ((fecha >= '2017-01-20'::date) AND (fecha <= '2017-01-21'::date) AND (plusalesprice < '1'::numeric))
    -> Parallel Seq Scan on precio_20170120 (cost=0.00..371114.62 rows=14693 width=60)
       Filter: ((fecha >= '2017-01-20'::date) AND (fecha <= '2017-01-21'::date) AND (plusalesprice < '1'::numeric))

Внешние разделы:

explain select * from precio where fecha >= '2017-01-01' and fecha <= '2017-01-02' and plusalesprice < 1

Append (cost=200.00..2650400.00 rows=20000000 width=60)
 -> Foreign Scan on precio_xdr20170101  (cost=200.00..1275200.00 rows=10000000 width=60)
    Filter: ((fecha >= '2017-01-01'::date) AND (fecha <= '2017-01-02'::date) AND (plusalesprice < '1'::numeric))
 -> Foreign Scan on precio_xdr20170102  (cost=200.00..1275200.00 rows=10000000 width=60)
    Filter: ((fecha >= '2017-01-01'::date) AND (fecha <= '2017-01-02'::date) AND (plusalesprice < '1'::numeric))

Параллельное добавление внешних таблиц в PostgreSQL 11


person Sanyo Moura    schedule 25.09.2018    source источник


Ответы (1)


Чтобы иметь возможность использовать Parallel Append, все дочерние элементы должны безопасно запускать параллельные рабочие процессы. postgres_fdw пока не может гарантировать такую ​​безопасность (даже в PostgreSQL 11), поэтому любые дочерние таблицы, которыми управляет postgres_fdw, не могут сканироваться параллельно.

person amitlan    schedule 06.12.2018
comment
Мне удалось выполнить параллельное добавление к моему FDW. Среди прочего мне пришлось сериализовать свои государственные структуры, которые нужно было разделить между рабочими. Вскоре я опубликую ответ здесь, лучше объяснив, как я это сделал. В моем случае я могу гарантировать, что все сканирования в моих удаленных таблицах могут выполняться параллельно. - person Sanyo Moura; 07.12.2018