
Привет, Хабр! На связи Марк — ведущий архитектор группы компаний «ГлоуБайт». Сегодня мы немного расширим результаты нагрузочного тестирования из предыдущей статьи “Нагрузочное тестирование GP6 vs GP7 vs Cloudberry” и поделимся результатами тестирования YMatrix. Сразу оговорюсь, что это дополнение к предыдущей статье, для того, чтобы сформировать понимание сравнимости результатов различных форков GreenPlum, поэтому акцентировать внимание будем только на YMatrix. Детали по методике тестирования и как были получены результаты для GP6, GP7 и Cloudberry 1.6, можно прочитать в предыдущей статье по ссылке выше.
По YMatrix у нас планируется отдельный материал с обзором особенностей и функциональности, поэтому тут будет только краткий экскурс.
Кто такой этот YMatrix?

На Хабре я не нашел ни одной статьи по YMatrix, а в профильном ТГ-сообществе GreenPlum Russia было найдено всего одно упоминание. На российском рынке MPP-систем это совсем новый зверь.
YMatrix была основана в 2020 году в Пекине выходцами из R&D команды GreenPlum.

В команде YMatrix 2 из 5 топ-контрибьюторов Greenplum (ключевые разработчики, менявшие исходный код), на которых приходится примерно 20% вклада в R&D GreenPlum. Ядро команды разработки состоит из 30+ разработчиков, занимающихся развитием основных фичей.
Как продукт, YMatrix представляет из себя активно развивающийся форк GreenPlum 7 с большим количеством доработок и изменений.
Что особенно хотелось бы отметить:
MARS3 – гибридный колоночно-строчный формат хранения, реализованный через структуру LSM Tree (Log-Structured Merge Tree), которая позволяет хранить данные в отсортированном виде по указанным полям;
Domino — потоковая репликация данных для обеспечения высокой доступности;
MXShift – инструмент для полной, инкрементальной или условной миграции данных между кластерами GreenPlum/YMatrix в кластер YMatrix;
MXVector – все вычисления производятся в векторизованном виде. В сценариях с большими объёмами данных это значительно повышает скорость выполнения запросов;
YMatrix Cloudedition — раздельное хранение и вычисление данных. Позволяет хранить бинарные файлы в Object Storage.
Подготовка к тестированию
Наши подопытные:
Open Source GreenPlum 6.27.1 – последняя open source версия GP6;
Open Source GreenPlum 7.2;
CloudBerry 1.6.0;
YMatrix 6.6.
Тесты, которые проводились:
Тестирование по методике TPC DS.
Тестирование проводилось на одинаковых настройках ОС, за исключением использования cgroups v1 и cgroups v2.
Базовые настройки кластера также совпадают для всех дистрибутивов:
max_connections=400,
max_prepared_transactions=400,
gp_resource_group_memory_limit=0.9.
Настройки ресурсных групп выставлялись одинаковые, с поправкой на изменившийся формат конфигурации, за исключением ситуаций, когда тесты падали по памяти. В таком случае выставлялось значение concurrency, при котором тест отрабатывал без ошибок.
Для YMatrix тестирование проводилось сразу на 8 сегментах на хост, чтобы результаты были сравнимы.
Стенд тестирования по методике НТ MPP-движков: ВМ в Яндекс Cloud следующего сайзинга:
Хост |
Количество |
vCPU |
RAM |
SSD |
Master |
1 |
8 |
64 |
1,5TB |
Segment |
4 |
16 |
128 |
2TBx4 |
Для TPC-DS был выбран увеличенный сайзинг для сравнимости результатов с другими движками из этой статьи.
Стенд тестирования по методике TPC-DS: ВМ в Яндекс Cloud следующего сайзинга:
Хост |
Количество |
vCPU |
RAM |
SSD |
Master |
1 |
8 |
64 |
1,5TB |
Segment |
4 |
32 |
252 |
2TBx4 |
Повторюсь, что результаты для GP6, GP7 и CBDB по методике НТ MPP-движков продублированы из предыдущей статьи, чтобы была возможность сравнить результаты “на одном экране”. Детальное описание методик тестирования – в статье. Для TPC-DS все тесты были перезапущены на увеличенном сайзинге и в 4 одновременных конкурентных потока, опять же для сравнимости.
Результаты тестирования
Настройки РГ для YMatrix:
concurrency |
cpu_max_percent |
cpu_weight |
cpuset |
memory_limit |
min_cost |
io_limit |
10 |
100 |
500 |
-1 |
80 |
0 |
-1 |
Начнем с результатов YMatrix.
Для YMatrix были проведены тесты с форматами хранения данных AOCO и MARS3.
Результаты сравнения AOCO и MARS3:

Формат MARS3 показывает себя лучше, в случае если удавалось добиться Nested Loop Join, так как данные хранятся в отсортированном виде по ключам соединения.
Результаты сравнения GP6, GP7, CBDB, YMatrix:



Объемы синтетических данных (при одинаковом количестве строк в таблицах):
GP6, GB |
GP7, GB |
CBDB, GB |
YM, GB |
|
Contractor |
1 |
1.5 |
1 |
1.5 |
Account |
19 |
17 |
17 |
17 |
Agreement |
10 |
9 |
8 |
9 |
Document |
419 |
389 |
389 |
388 |
Transaction |
866 |
835 |
687 |
845 |
Transaction индексы |
7 |
|||
Сумма |
1315 |
1251.5 |
1109 |
1262 |
Время генерации данных:
GP6, сек |
GP7, сек |
CBDB, сек |
YM, сек |
19800 |
17600 |
25200 |
20150 |
Результаты TPC-DS:


Для YMatrix в тестах TPC-DS использовался формат хранения MARS3 для всех объектов.
Какие выводы делаем?
С точки зрения производительности на данный момент YMatrix показывает себя лучше почти во всех тестах, за счет нового формата хранения MARS3 и векторных вычислений.
В ходе тестирования мы выявили ряд нюансов, связанных с этим форматом хранения, все они были переданы вендору и ушли в бэклог развития проекта.
В начале следующего года мы планируем выпустить большую статью с детальным обзором YMatrix. К этому моменту должны появиться результаты тестирования после доработок MARS3. Также к сравнению добавится Cloudberry 2.0, который вышел совсем недавно.
На наш взгляд, если вам нужна Enterprise-версия GreenPlum 7, то стоит присмотреться к YMatrix как к альтернативе продукта от Broadcom, который, к сожалению, на данный момент недоступен на нашем рынке.