Поскольку Greenplum является форком PostgreSQL, предназначенным для параллельного выполнения запросов на нескольких сегментах - если фактические запрашиваемые данные распределены по ним - он может в основном использовать повышенную производительность выполнения на нескольких дисковых системах и отдельных узлах кэши. Затраты на отправку данных на главный узел и окончательную обработку запросов, а также на то, что главному узлу приходится подготавливать запрос каждого узла и отправлять его для обработки, обычно невелики, но значительно увеличиваются, если неагрегированные запросы с окончательной сортировкой должны быть сделано мастером.
Однако, поскольку они только недавно слились в версии 9.4 вышестоящего кода PostgreSQL, основная проблема заявлений о производительности Greenplums заключается в том, что она сравнивается с версией PostgreSQL, которая слишком старая для тех, кто заботится о ней. производительности и не имеет преимуществ от каких-либо улучшений параллельного запроса , которые были введены, начиная с версии 9.6.
Несколько сегментов на хост также не сильно помогают, так как каждый из сегментов ничего не знает о других на одном хосте и, следовательно, конкурирует за ресурсы (дисковый ввод-вывод, операции с памятью, кэш-память ЦП, сеть). , ...) или вам на самом деле нужно ограничить его много на сегмент, как рекомендовано , что может свести вас с ума, потому что некоторые запросы затем просто выливаются на диск для сортировки. Правильно настроенная одиночная установка PostgreSQL 11 должна превзойти любое количество сегментов Greenplum на одном узле просто потому, что у него больше общего кэша, и он на самом деле знает об этом.
TL; DR
PostgreSQL upstream получил много улучшений в последние годы, и для конкретных случаев использования, пожалуйста, рассмотрите возможность использования расширений, а не полного форка.
Кроме того, если вас беспокоит производительность count(distinct ...)
, вам следует обратить пристальное внимание на как вы считаете .