Первичный анализ производительности запросов в Arenadata DB 6.27 и Cloudberry Database 1.6

от автора

Некоторое время назад руководитель задал мне вопрос: «Какой 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) по первичным ключам.

В кластерах были выполнены запросы двух видов:

  1. соединения таблиц,

  2. запросы из курса «QPT. Оптимизация запросов» фирмы «PostgresPro»:

    https://postgrespro.ru/education/courses/QPT

Замеры времени выполнения запросов выполнялись с помощью команды 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); 

Выводы

  1. Эксперименты показали, что версия PostgreSQL, лежащего в основе MPP-кластера, не оказывает существенного влияния на производительность соединений таблиц. Arenadata DB 6.27 с ядром PostgreSQL 9.4 и Cloudberry Database 1.6 с ядром PostgreSQL 14.4 показали приблизительно одинаковые времена выполнения этого типа запросов.

  2. Выявлено несколько типов запросов, которые в Cloudberry Database 1.6 выполняются эффективнее, чем в Arenadata DB 6.27: поиск по диапазону, агрегирование, антисоединение.

  3. Количество разнообразных MPP-кластеров постоянно растет: Arenadata DB, Cloudberry Database, Yandex.Cloud Greenplum, Greengage… Встает непростая задача выбора кластеров для конкретных проектов. Анализ производительности – одна из составляющих выбора. Поэтому важно совершенствовать методику анализа производительности запросов MPP-кластеров.


ссылка на оригинал статьи https://habr.com/ru/articles/882082/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *