Статистический анализ результатов нагрузочного тестирования СУБД в условиях облачной инфраструктуры

Завершение цикла

Нагрузочное тестирование СУБД в облачной среде — часть 1 / Хабр (habr.com)

Нагрузочное тестирование СУБД в облачной среде — часть 2. Итоги и результат / Хабр (habr.com)

Задача

Оценить производительность СУБД при постоянной нагрузке, в условиях нестабильной инфраструктуры .

Проблема

На производительность СУБД влияет множество случайных факторов. Производительность инфраструктуры не постоянна и меняется в очень широком диапазоне.

Гипотеза

В идеальных условиях, при постоянной нагрузке, значения производительности СУБД должно иметь нормальноераспределение.

Из гипотезы следует решение задачи:

  1. Из серии наблюдений сформировать выборку, максимально удовлетворяющую критерию нормального распределения .

  2. Статистические результаты найденной выборки — будут решением задачи.

С целью проверки гипотезы и для формирования методики проведения нагрузочного тестирования , проведена серия экспериментов

Инструмент и сценарий тестирования

Для тестирования используется стандартный инструментарий — утилита pgbench

Параметры pgbench

  • pgbench_init_param= --no-vacuum --quiet --foreign-keys --scale=100 -i test_pgbench

  • pgbench_param= --progress=60 --protocol=extended --report-per-command --jobs=1 --client=100 --time=14400 test_pgbench

Сценарий тестирования: непрерывная постоянная нагрузка на СУБД, создаваемая pgbench.

Производительность СУБД: рассчитывается по методике описанной в статье Корреляционный анализ для решения инцидентов производительности СУБД / Хабр (habr.com)

Статистический анализ экспериментальных результатов

Формирование исходных выборок

Для снижения влияния выбросов показателей производительности при формировании выборки , используется медианное сглаживание с периодом 1 час.

Выборка считается подходящей для дальнейшего анализа, если значения медианы и моды — совпадают.

медиана случайной величины: в этом случае оно определяется как число, которое делит пополам распределение. Иными словами, медианой случайной величины является такое число, что вероятность получить значение случайной величины справа от него равна вероятности получить значение слева от него (и они обе равны ½). Можно также сказать, что медиана является 50-м перцентилем, 0,5-квантилем или вторым квартилем выборки или распределения.

Медиана (статистика) — Википедия (wikipedia.org)

Мо́да — одно или несколько значений во множестве наблюдений, которое встречается наиболее часто

Мода (статистика) — Википедия (wikipedia.org)

Анализ выборок на нормальность распределения

Для определения соответствия выборки нормальному распределению существует довольно много статистических тестов:

  • критерий Шапиро-Уилка,

  • критерий асимметрии и эксцесса,

  • критерий Дарбина,

  • критерий Д'Агостино,

  • критерий эксцесса,

  • критерий Васичека,

  • критерий Дэвида-Хартли-Пирсона,

  • критерий хи-квадрат,

  • критерий Андерсона-Дарлинга,

  • критерий Филлибена.

Проблема в том, что пока не найдены реализации тестов на нормальность распределения в PostgreSQL. Со статистикой в PostgreSQL вообще не густо.

Поэтому для практического решения задачи, принято решение сильно упростить процесс тестирования выборки на нормальность распределения.

Для упрощения процесса проверки выборки на приближение к нормальному распределению была предложена следующая методика, с использованием функции PostgreSQL — normal_rand

normal_rand(int numvals, float8 mean, float8 stddev) returns setof float8

Функция normal_rand выдаёт набор случайных значений, имеющих нормальное распределение (распределение Гаусса).

Параметр numvals задаёт количество значений, которое выдаст эта функция. Параметр mean задаёт медиану нормального распределения, а stddev — стандартное отклонение.

  1. По имеющимся значениям количества наблюдений, медианы и стандартного отклонения с помощью функции normal_rand формируется тестовая выборка

  2. Оценка на приближение выборки к нормальной выполняется на основании полученного значения дисперсии разниц, между значениями исходной выборки и отсортированными значениями, полученными с использованием normal_rand

Можно использовать 2 подхода:

  1. Сортируем выборку по значению медианы производительности. Т.к. ищем выборку в которой производительность максимальна.

  2. Сортируем выборку по значению дисперсии. Т.е. ищем выборку с минимальным разбросом значений производительности.

Практическая реализация

Сценарий

Тестовое нагрузочное тестирования в течении 4-х дней.

  1. 19.08.2024 14:00 — 16:00

  2. 20.09.2024 11:00 — 17:00

  3. 21.09.2024 10:00 — 17:00

  4. 22.09.2024 10:00 — 17:00

В ходе проведения тестового нагрузочного тестирования и формирования исходного набора, было сформировано 235 выборок удовлетворяющих условию Медиана = Мода.

Подготовка выборок для анализа соответствия нормальному распределению

  1. Максимальное значение производительности

Рис.1 Максимальное значение производительности

Рис. 1 Максимальное значение производительности

Рис.3. Распределение вероятности за период 12:01-13:01 21.08.2024

Рис. 3. Распределение вероятности за период 12:01–13:01 21.08.2024

Рис.4. Распределение вероятности за период 12:01 - 13:01 21.08.2024 - график

Рис. 4. Распределение вероятности за период 12:01 — 13:01 21.08.2024 — график

  1. Минимальная дисперсия

    Рис.5. Минимальная дисперсия производительности

    Рис. 5. Минимальная дисперсия производительности

    Рис.6. Распределение вероятности за период 10:32 - 11:32 21.08.2024

    Рис. 6. Распределение вероятности за период 10:32 — 11:32 21.08.2024

Рис.7. Распределение вероятности за период 10:32 - 11:32 - график

Рис. 7. Распределение вероятности за период 10:32 — 11:32 — график

Проверка на соответствие нормальному распределению, формирование тестовой выборки с использованием normal_rand

  1. Максимальное значение производительности

Рис.8. Тестовая выборка

Рис. 8. Тестовая выборка

Рис.9. График тестовой выборки

Рис. 9. График тестовой выборки

Рис.10. График исходной выборки

Рис. 10. График исходной выборки

Рис.11. Разностная таблица между исходной и тестовой выборкой

Рис. 11. Разностная таблица между исходной и тестовой выборкой

Рис.12. Дисперсия по разностной таблице

Рис. 12. Дисперсия по разностной таблице

  1. Минимальная дисперсия

Рис.13. Тестовая выборка

Рис. 13. Тестовая выборка

Рис.14. График тестовой выборки

Рис. 14. График тестовой выборки

Рис.15. График исходной выборки

Рис. 15. График исходной выборки

Рис.16. Разностная таблица.

Рис. 16. Разностная таблица.

Рис.17. Дисперсия.

Рис. 17. Дисперсия.

Результат эксперимента

Как видно из сравнения , вполне ожидаемо, исходная выборка минимальным значением дисперсии — наиболее приближена к нормальному распределению и следовательно является решением поставленной задачи.

Таким образом , по результату проведенного нагрузочного тестирования , проведенному в период:

  1. 19.08.2024 14:00 — 16:00

  2. 20.09.2024 11:00 — 17:00

  3. 21.09.2024 10:00 — 17:00

  4. 22.09.2024 10:00 — 17:00

Можно зафиксировать следующие результаты производительности СУБД при данной нагрузке, в данной инфраструктуре:

  1. Значение производительности: 2028

  2. Нижняя граница снижения производительности: 2022

  3. Снижение производительности: -1.28%

© Habrahabr.ru