Некоторое время назад руководитель задал мне вопрос: «Какой MPP-кластер лучше с точки зрения разработчика: Arenadata 6 или Cloudberry?» Я рассказал про версии PostgreSQL, лежащие в основе этих кластеров, — 9 и 14 соответственно. Еще сказал, что для детального анализа производительности желательно развернуть кластеры на серверах, заполнить их данными и выполнить побольше разных запросов.
Мой ответ руководителю не понравился, пришлось выдумывать методику первичного анализа производительности кластеров «на берегу», до разворачивания на серверах. Оказалось, что интересные данные о производительности кластеров можно получить и на персональном компьютере.
Методика проведения экспериментов
Для проведения экспериментов на виртуальные машины были установлены MPP-кластеры:
1. Arenadata DB 6.27 из репозитория:
https://github.com/arenadata/gpdb
по инструкции:
https://github.com/arenadata/gpdb/blob/adb-6.x/README.linux.md
2. Cloudberry Database 1.6 из репозитория:
https://github.com/cloudberrydb/cloudberrydb
по инструкции:
https://cloudberry.apache.org/docs/cbdb-linux-compile
Настройки виртуальных машин – одинаковые:
-
оперативная память: 16 Гб,
-
процессоры: 4.
Конфигурации кластеров – одинаковые:
-
вариант конфигурации: Single-Node,
-
количество сегментов: 3,
-
зеркалирование сегментов: да.
Версии PostgreSQL в кластерах:
select version();
PostgreSQL 9.4.26 (Greenplum Database 6.27.1_arenadata59+dev.1.gcbb3338b74 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit compiled on …
PostgreSQL 14.4 (Cloudberry Database 1.6.0+dev.641.ge36838cea1 build dev) on x8 6_64-pc-linux-gnu, compiled by gcc (Ubuntu 10.5.0-1ubuntu1~22.04) 10.5.0, 64-bit compiled on …
В кластеры с помощью PXF (Platform Extension Framework) была загружена БД «Авиаперевозки»:
https://postgrespro.ru/education/demodb
Характеристики базы данных: 8 таблиц, общий объем 1.5 Gb и 22 млн строк.
Таблицы в кластерах были распределены (distributed by) по первичным ключам.
В кластерах были выполнены запросы двух видов:
-
соединения таблиц,
-
запросы из курса «QPT. Оптимизация запросов» фирмы «PostgresPro»:
Замеры времени выполнения запросов выполнялись с помощью команды explain analyze. Для исключения влияния кеширования данных на замеры времени каждый замер выполнялся 3 раза и считалось среднее время.
Анализ производительности соединений
Сначала были выполнены запросы, для которых в первую очередь предназначены MPP-кластеры, — соединения таблиц. Запросы были подобраны максимально разнообразные:
-
соединения больших и маленьких таблиц,
-
соединения разного количества таблиц,
-
запросы с операциями Redistribute Motion в планах выполнения и без них,
-
запросы с использованием spill-файлов и без использования этих файлов.
Различия в производительности этих запросов на кластерах Arenadata 6 или Cloudberry оказались минимальными. Это можно объяснить тем, что оба MPP-кластера недалеко ушли от своего общего предка – «ванильного» Greenplum-а.
Выполнение запросов из курса «Оптимизация запросов»
В серии экспериментов по курсу оптимизации были обнаружены запросы, время выполнения которых на кластере Cloudberry было заметно меньше, чем на Arenadata 6:
Таблица 1. Запросы с различными временами выполнения на кластерах (мс)
|
Запрос |
Arenadata DB 6.27 |
Cloudberry Database 1.6 |
|
Поиск по диапазону |
201 |
81 |
|
Агрегирование 1 |
287 |
169 |
|
Агрегирование 2 |
198 |
97 |
|
Агрегирование 3 |
206 |
56 |
|
Агрегирование 4 |
165 |
85 |
|
Антисоединение |
9 |
5 |
-- Поиск по диапазону explain analyze select * from bookings where book_ref > '000900' and book_ref < '000939'; -- Агрегирование 1 explain analyze select count(*) from bookings; -- Агрегирование 2 explain analyze select sum(total_amount) from bookings where book_ref < '400000'; -- Агрегирование 3 explain analyze select count(book_ref) from bookings where book_ref <= '400000'; -- Агрегирование 4 explain analyze select count(*) from bookings where total_amount < 20000 and book_date::timestamp with time zone > '2017-07-15 18:00:00+03'::timestamp; -- Антисоединение explain analyze select * from aircrafts a where a.model like 'аэробус%' and not exists (select * from seats s where s.aircraft_code = a.aircraft_code);
Выводы
-
Эксперименты показали, что версия PostgreSQL, лежащего в основе MPP-кластера, не оказывает существенного влияния на производительность соединений таблиц. Arenadata DB 6.27 с ядром PostgreSQL 9.4 и Cloudberry Database 1.6 с ядром PostgreSQL 14.4 показали приблизительно одинаковые времена выполнения этого типа запросов.
-
Выявлено несколько типов запросов, которые в Cloudberry Database 1.6 выполняются эффективнее, чем в Arenadata DB 6.27: поиск по диапазону, агрегирование, антисоединение.
-
Количество разнообразных MPP-кластеров постоянно растет: Arenadata DB, Cloudberry Database, Yandex.Cloud Greenplum, Greengage… Встает непростая задача выбора кластеров для конкретных проектов. Анализ производительности – одна из составляющих выбора. Поэтому важно совершенствовать методику анализа производительности запросов MPP-кластеров.
ссылка на оригинал статьи https://habr.com/ru/articles/882082/
Добавить комментарий