Архивный материал. Описанные методики или устарели или не используются.
Задача
В продолжении задач
Необходимо разработать методику анализа производительности СУБД, позволяющую:
1) Получать статистически достоверные данные результатов экспериментов по нагрузочному тестированию.
2) Оценить характер изменения производительности СУБД в зависимости от нагрузки . Определить штатные и критичные значения нагрузки на СУБД .
3) Выработать методику позволяющую сравнивать производительность СУБД разной конфигурации и в разной инфраструктуре.
Реализация
В качестве тестового стенда используются тестовые виртуальные машины расположенные в облачном хранилище.
Ресурсы виртуальных машин, существенно отличаются:
ВМ1 : 1 CPU - очень простой тестовый запрос
current_delta = (ROUND( random ())::integer)*10 + 1 ;
SELECT ROUND( random ()* 5)::integer INTO current_aid ;
UPDATE pgbench_accounts SET abalance = abalance + current_delta WHERE aid = current_aid;
ВМ2: 24 CPU - стандартный запрос pgbench
current_delta = (ROUND( random ())::integer)*10 + 1 ;
SELECT MIN(aid) INTO min_i FROM pgbench_accounts ;
SELECT MAX(aid) INTO max_i FROM pgbench_accounts ;
SELECT ROUND( random ()* max_i)::integer INTO current_aid ;
UPDATE pgbench_accounts SET abalance = abalance + current_delta WHERE aid = current_aid;
SELECT abalance INTO test_rec FROM pgbench_accounts WHERE aid = current_aid ;
SELECT MIN(tid) INTO min_i FROM pgbench_tellers ;
SELECT MAX(tid) INTO max_i FROM pgbench_tellers ;
SELECT ROUND( random ()* max_i)::integer INTO current_tid ;
UPDATE pgbench_tellers SET tbalance = tbalance + current_delta WHERE tid = current_tid ;
SELECT MIN(bid) INTO min_i FROM pgbench_branches ;
SELECT MAX(bid) INTO max_i FROM pgbench_branches ;
SELECT ROUND( random ()* max_i)::integer INTO current_bid ;
UPDATE pgbench_branches SET bbalance = bbalance + current_delta WHERE bid = current_bid ;
В качестве нагрузки используется стандартный инструмент pgbench. Количество одновременных подключений (параметр —clients ) растет экспоненциально .
Режимы работы СУБД
Использование аэродинамической терминологии при экспериментах по производительности СУБД
Развивая идею
Если провести аналогию продувки модели в аэродинамической трубе с нагрузочным тестированием СУБД получается следующая , занимательная картина, очень грубо и просто для красивой аналогии , конечно:
Подъёмная сила Y = операционная скорость СУБД.
Сила сопротивления X = ожидания СУБД.
Угол атаки alpha = нагрузка на СУБД.
Коэффициент Сy= отношение операционной скорости к нагрузке на СУБД.
Коэффициент Cx = отношение ожиданий к нагрузке на СУБД.
Можно добавить и провести еще аналогии:
- Ламинарное обтекание профиля - Зеленый режим работы СУБД
- Турбулентный режим обтекания и начало срыва потока - Желтый режим работы
- Срыв потока, переход в критичный режим - Красный режим работы
Нагрузка на СУБД (угол атаки alpha/характер обтекания профиля)
Средние значение нагрузки по режимом работы: ВМ1 / ВМ2
-Зеленый: 3,5556 / 42,9221
-Желтый: 5,3784 / 75,4127
-Красный: 13,0508 / 114,7273
Отношение операционной скорости к нагрузке (коэффициент Cy)
Средние значение Cy по режимам работы: ВМ1 / ВМ2
-Зеленый: 1 860,8859 / 3 088,9647
-Желтый: 658,8232 / 437,5932
-Красный: 102,2024 / 237,8892
Важное замечание - в данных условиях теста операционная скорость ВМ1 и ВМ2 одного порядка . Можно построить тестовый сценарий таким образом, что операционные скорости бы совпали. Т.е. в случае pgbench можно настроить тестовые запросы и значение параметра --connect таким образом, что TPS будет совпадать . Следует ли из факта совпадения TPS эквивалентность производительности ? Конечно же нет, с точки зрения здравого смысла. Что и доказано в результате текущих экспериментов. Т.е. еще раз - pgbench не бенчмарк. С бенчмарками СУБД , вернее с теми цифрами которые они показывают и с теми методиками как их проводят, вообще все грустно и печально(как можно ориентироваться на цифры бенчмарка в течении 10 минут !? ). Но, это уже другая история.
Отношение ожиданий СУБД к нагрузке( коэффициент Cx)
Средние значение Cx по режимам работы: ВМ1 / ВМ2
-Зеленый: 635,2222 / 131,2646
-Желтый: 1 110,8684 / 181,1227
-Красный: 2 207,7236 / 366,8534
Результаты решения поставленных задач эксперимента
1) Получать статистически достоверные данные результатов экспериментов по нагрузочному тестированию - полученные значения являются результатом статистической обработки совокупности данных. После применения медианного сглаживания с периодом 1 час данные, выбросы отсутствуют.
2) Оценить характер изменения производительности СУБД в зависимости от нагрузки . Определить штатные и критичные значения нагрузки на СУБД - определены характер влияния нагрузки на производительность СУБД и отличия влияния нагрузки на производительность для конкретной СУБД.
3) Выработать методику позволяющую сравнивать производительность СУБД разной конфигурации и в разной инфраструктуре - производительность СУБД можно сравнивать для разных конфигураций и инфраструктуры при проведении одинаковых тестовых сценариев. В данном эксперименте для штатной работы производительность более мощной СУБД в 9 раз выше , по сравнению с более слабой виртуальной машиной.
Послесловие. Необходимый экскурс в аэродинамику
Поляра крыла — это график зависимости подъёмной силы и лобового сопротивления, точнее их коэффициентов, при разных углах атаки (направление крыла к встречным потокам ветра во время полёта). 1
Для построения поляры крыло (или его модель) продувается в аэродинамической трубе при различных углах атаки. При продувке для каждого угла атаки аэродинамическими весами замеряются величины подъёмной силы Y и силы лобового сопротивления Q. Определив величины сил Y и Q для данного профиля, вычисляют их аэродинамические коэффициенты. 1
Поляра крыла нужна для аэродинамического расчёта самолёта, так как по ней можно определить все основные аэродинамические характеристики крыла. 3 Например, по поляре можно понять, под каким углом крыла самый выгодный (экономически) для самолёта взлёт и приземление, а под каким — опасно, так как может образоваться срыв потока (сильные завихрения над верхней частью крыла). 1
Поляра — графическая зависимость коэффициента подъёмной силы и коэффициента лобового сопротивления от различных углов атаки. Каждая точка кривой соответствует определённому углу атаки, который часто обозначается на графике в виде параметра[1].
График называется полярой, так как с точки зрения физического смысла целесообразно рассматривать его в полярных координатах. В этом случае радиальная координата пропорциональна полной аэродинамической силе, действующей на аэродинамический объект, а тангенс полярного угла равен аэродинамическому качеству K.
--------------------------------------
Возникает закономерный вопрос:
Как построить график в полярных координатах для производительности СУБД ? Когда определенной нагрузке (аналог угла атаки) будет соответствовать значение коэффициента Cy (отношение операционной скорости к нагрузке на СУБД) и значение коэффициента Cx (отношение ожиданий к нагрузке на СУБД).
Дополнительно о поляре крыла