Pull to refresh
1
@rinaceread⁠-⁠only

User

Send message

В продолжении темы https://habr.com/ru/posts/837710/

Все идет к тому, что для решения задачи о выборе результатов тестирования , в общем виде, придётся проверять на эффективность использования критерии нормальности.

Проблема в том , что со статистическими функциями в PostgreSQL не очень, а критериев много :

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

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

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

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

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

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

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

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

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

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

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

Tags:
Total votes 1: ↑1 and ↓0+3
Comments0

В развитии темы

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

Методика проведения нагрузочного тестирования .

Задача

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

Проблема

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

Гипотеза

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

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

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

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

Дополнение по итогам анализа результатов проведенных экспериментов

В связи с трудоемкостью реализации стандартных статистических тестов Колмогорова -Смирнова и Шапиро –Уилка в PostgreSQL, для практического решения задачи, условия получения результирующей выборки можно сильно упростить.

Достаточно выполнение условия симметричность распределения: Медиана = Мода.

Полученные средние значения ( медиана/моде) производительности будут исходным набором данных.

Для уменьшения объёма выборки , набор данных необходимо отсортировать и отфильтровать по значению дисперсии, исключив результаты выходящие за заданную погрешность измерения.

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

Дополнение

Запускать нагрузку необходимо в течении суток.

Tags:
Total votes 3: ↑1 and ↓2+1
Comments0

pgbench для получения результирующих значений tps использует среднее арифметическое - это серьезная проблема , потенциально способная сильно исказить результат.

Математики говорят, что среднее арифметическое не является робастным. Это значит, что оно не устойчиво к выбросам. Хватит одного-единственного экстремально большого значения, чтобы полностью испортить результат.

Описательная статистика перформанс-распределений https://habr.com/p/722342/

А производительность СУБД есть случайная функция.

Вывод - не стоит использовать результаты pgbench для анализа влияния каких либо изменений и сравнения производительности СУБД.

Как инструмент создания нагрузки - да, как инструмент анализа результатов - нет.

Насколько СУБД подвержено случайным факторам, например облачной среды, показано:

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

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

Tags:
Total votes 2: ↑1 and ↓1+2
Comments0

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

Методы детерминированного анализа "изменим тут и в результате получим это" или "причиной этого является это" - в принципе если и применимы, то слабоэффективны. Огромное количество времени тратится на то, чтобы график одной , казалось бы важной , метрики изменился . А в результате поведение СУБД как системы , в целом, или не меняется или меняется совершенно неожиданным образом.

Классический пример , повторяющийся регулярно - в ходе проведения нагрузочного тестирования получены некоторые показатели, соответствующие ожидаемым в неких документах , все довольны , этап договора закрыт , система передаётся в промышленную эксплуатацию. Но, как только начинается реальная эксплуатация - информационная система либо тормозит, либо - авария , кризис , поиск виноватых и серебрянных пуль.

Или проще говоря - нет никакой возможности предсказать производительность СУБД по детерминированным входным параметрам : количество соединений , QPS , TPS , etc.

Итог: для анализа производительности и результатов нагрузочного тестирования СУБД - нужны другие методы и другие метрики.

Tags:
Total votes 3: ↑1 and ↓2+1
Comments1

Закрытие темы "Гипотеза о связи относительного количества ожиданий СУБД и производительности СУБД "

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

Для проверки гипотезы была проведёна серия экспериментов по 3-м сценарям:

1) Базовая(эталонная) нагрузка.

2) Дополнительная нагрузка на CPU/RAM.

3) Очередь ожидания освобождения блокировки строк/таблиц.

Итог: Гипотеза не подтверждается экспериментальными данными : разница в соотношении между ожиданиями составляет ~3% , при деградации производительности ~34%.

Или другими словами: соотношение между ожиданиями при работе СУБД, в общем случае, не зависит от нагрузки и производительности СУБД и остаётся примерно постоянным для конкретной СУБД.

Таким образом - изменение соотношения между ожиданиями СУБД не может являться индикатором деградации производительности.

Тема закрыта. Статья снята с публикации.

P.S. Однако, в ходе экспериментов, получен интересный побочный результат:

При использовании pgbench c параметром "--connect", отношение количества ожиданий влияющих на производительность, к количеству ожиданий не влияющих на производительность - существенно отличается (~38%).

Следствие - данное соотношение может быть использовано как оценочное значение результатов нагрузочного тестирования и для оценки эффективности архитектурного решения.

Tags:
Total votes 3: ↑1 and ↓2+1
Comments0

О способе оценки производительности отдельного SQL запроса .

В дополнении к теме:

Размышления о мониторинге производительности отдельного SQL запроса

Для возможного варианта решения задачи:

https://habr.com/ru/posts/833162/

если производительность отдельного SQL запроса в настоящее время не мониторится.

Предположение.

Для того, чтобы оценить производительность отдельного SQL запроса необходимо и достаточно получить отношение стоимости запроса (EXPLAIN ANALYSE) к актуальному времени выполнения запроса .

Важное следствие и ограничение:

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

Данное весьма существенное ограничение , вообще говоря, влечет реальные проблемы для использования данной методики в промышленной эксплуатации СУБД(запрос может быть весьма ресурсоемким). Но с другой стороны, позволяет очень чётко и однозначно отследить причины изменения производительности запроса при изменении текста запроса и/или, что важнее - при изменении входящих параметров запроса .

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

Tags:
Total votes 4: ↑1 and ↓30
Comments3

К вопросу о важности определения понятия "производительность СУБД".

Пусть имеется некий запрос к СУБД, который важно мониторить с точки зрения эффективности и качества работы.

Сценарий 1: запрос выдает N1 строк и выполняется за время T1.

Сценарий 2: запрос выдает N2 строк и выполняется за время T2.

Вопрос: можно ли утверждать о инциденте в случае Сценария 2, если "T2 > T1 И N2 > N1" ?

Утверждение: Не имея определения понятия "производительность" и не обладая возможностью рассчитать метрику производительности отдельного запроса, получить однозначный ответ на поставленный вопрос - невозможно.

Tags:
Total votes 3: ↑2 and ↓1+3
Comments0

В продолжении темы - "время отклика СУБД" https://habr.com/ru/posts/827054/

Метрику не имеет смысла использовать для алерта о деградации производительности СУБД .

Допустим имеется OLTP нагрузка на СУБД - большое количество коротких запросов. В результате, имеем некоторое значение метрики "Среднее время отклика" = sum(total_exec_time) / sum(calls).

И вот , ситуация изменилась - запросов OLTP стало меньше , но появились аналитические/долгие запросы .

В результате значение метрики увеличивается - запросов стало меньше , общее время выполнения увеличилось.

Является ли данная ситуация алертом для создания инцидента о деградации производительности СУБД ?

Конечно же - нет.

Более того - в этом случае резко увеличится количество обрабатываемых блоков разделяемой области.

Что также не является показателем деградации производительности СУБД , даже совсем наоборот .

P.S. Использование данной метрики оправдано только в одном сценарии - нагрузочное тестирование инфраструктуры при обязательном условии постоянства нагрузки на СУБД.

Tags:
Total votes 3: ↑1 and ↓20
Comments0

О мониторинге СУБД.

Классическая метрика -"Время отклика СУБД" - в реальной жизни бесполезна.

Причина - подверженность ошибке 1-го и 2-го рода.

1) Во время аварии отклик СУБД может не только не расти, но даже уменьшаться.

2) Рост времени отклика может быть вызван снижением нагрузки на СУБД.

Tags:
Total votes 2: ↑1 and ↓1+2
Comments6

Утилита pgpro_pwr имеет одну очень серьезную проблему - жестко установленное расписание сбора снимков с помощью take_sample.

Чтобы получить выборки со всех включённых серверов, вызовите функцию take_sample(). Обычно достаточно получать одну-две выборки в час. Для выполнения этой функции по расписанию можно воспользоваться планировщиком cron или подобным.

Последствия:

1)Невозможно собрать статистику производительности и состояния СУБД во время инцидента производительности . Например, если снимки собираются по рекомендации, указанной в документации - каждые полчаса , то практически нельзя ничего сказать о состоянии СУБД в течении 5-10 минут, в которые было зафиксировано снижение производительности в середине 30-ти минутного промежутка.

2) Ожидания в разделе "Top waits" не коррелированы с показателями производительности СУБД. Отчет показывает ожидания отсортированные по времени. И только за весь период снимка. Установить, какое именно ожидание/ожидания (и следовательно запрос/запросы) повлияло/повлияли на деградацию производительности СУБД во время инцидента - практически невозможно.

Tags:
Total votes 1: ↑1 and ↓0+3
Comments0

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

Тренды производительности СУБД
Тренды производительности СУБД
  • 11:10 - 13:20 : Нисходящий тренд (снижение производительности )

  • 13:30 - 15:40 : Восходящий тренд ( рост производительности )

Казалось бы, в период 11:10-13:20 - инцидент деградации производительности.

НО.

Корреляционный анализ событий ожиданий и показателей производительности показал – корреляция между событиями ожидания и изменением производительности в период 11:10 – 13:20 - отсутствует.

Вероятнее всего, из данного факта следуют следующие выводы:

  1. Аномалии СУБД в период 11:10 - 13:20 – отсутствуют

  2. Снижение производительности СУБД вызвано внешними причинами (снижение количества подключений, изменение характера запросов, снижением числа запросов и т.д. и т.п. ) .  Т.е. причинами, находящимися вне зоны ответственности DBA.

Tags:
Total votes 4: ↑1 and ↓30
Comments0

Статистический анализ производительности СУБД - первые итоги : быстрый поиск аномалий, в первую очередь с целью избежать непродуктивной траты времени в ответ на очередную иллюзию манагеров -"мы упёрлись в СУБД". Нет, коллеги с СУБД все в порядке, разбирайтесь с вашими альтернативно одаренными разработчиками и приложением.

1) Статистика производительности СУБД- скользящие средние , стандартное отклонение , дисперсия : полезно для оценки текущего состояния и подготовки baselines и оповещений по проблемам производительности.

2) Статистика нагрузки на СУБД-количество подключений , гистограмма подключений , коэффициент корреляции с производительностью : очень помогает быстро обнаружить аномальное поведение приложения.

3) Статистика ожиданий СУБД - количество ожиданий , гистограмма ожиданий , коэффициент корреляции с производительностью : очень помогает быстро выявить аномалии инфраструктуры и приложения.

4)Быстрые/медленные скользящие средние, тренды, свечи, уровни поддержки - это просто красиво :-) Манагерам нравятся красивые картинки.

Tags:
Total votes 5: ↑2 and ↓3+3
Comments2

Мысли вслух - DBA ремесло или наука ?

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

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

К сожалению пока не нашёл ничего по использованию таких базовых понятий как "мат.ожидание" , "стандартное отклонение" , "дисперсия", "коэффициент корреляции" для администрирования баз данных. В первую очередь для анализа производительности баз данных.

Да, что там, даже нет четкого математического определения- что считается производительностью базы данных и как измерять.

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

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

P.S.Пример из жизни - имеется пул соединений к СУБД - как определить, что характер нагрузки изменился ?

Tags:
Total votes 3: ↑3 and ↓0+5
Comments0

В продолжении предыдущего поста. Получены интересные результаты значений коэффициента корреляции между:

  1. Количество событий ожидания и показателем производительности СУБД

  2. Количество соединений с конкретного ip и показателем производительности СУБД

Отрицательная корреляция между количеством событий ожидания и показателем производительности СУБД в результате оказалась очень слабая:

IO ControlFileSyncUpdate -0,155750768

Client ClientWrite -0,132699875

LWLock XactSLRU -0,123296926

...

Отрицательная корреляция между количеством соединений с конкретного ip и показателем производительности СУБД - умеренная:

XX.XXX.XXX.1 -0,43280346

XX.XXX.XXX.2 -0,41262827

XX.XXX.XXX.3 -0,409033529

XX.XXX.XXX.4 -0,388472

XX.XXX.XXX.4 -0,376145747

...

Теперь начинается самое интересно - сбор статистики наблюдений и интерпретация результатов корреляционного анализа .

Tags:
Total votes 1: ↑1 and ↓0+3
Comments0

Или я плохо ищу или действительно , тема корреляционного анализа производительности СУБД , еще не исследовалась.

Например было бы очень интересно установить - какой из факторов оказывает максимальное влияние на производительность СУБД или наоборот - как производительность СУБД влияет на показатели СУБД и инфраструктуры :

  • Количество соединений

  • Утилизация CPU

  • Утилизация RAM

  • Утилизация I/O

  • Количество ожиданий СУБД

  • Показатели CPU (iowait и т.п)

  • Показатель Cache Hit Ratio

  • Объем обработанных блоков shared_buffer

  • Что-то еще из огромного списка метрик

Tags:
Total votes 3: ↑2 and ↓1+3
Comments7

По поводу тестирования встроенного пула Postgres Pro, ситуация складывается странная : при использовании параметра "--connect" , если размер пула меньше чем "clients" - pgbench зависает. Все соединения имеют состояние 'Idle in transaction'.

Пока не разобрался это бага или фича.

Видимо, придется делать свой скрипт для оценки влияния пула на производительность приложений работающих по схеме "новая транзакция - новое соединение".

Update: Вопрос закрыт - pgbench не предназначен для тестирования нагрузки с использованием пула соединений. Придется сочинять свой инструмент.

Tags:
Total votes 2: ↑1 and ↓1+2
Comments0

В продолжении темы "Как измерить производительность СУБД" https://habr.com/ru/posts/787966/

В ходе анализа результатов установлено, что, хотя используемый вектор: (N1, N2, N3), где:

  • N1 - количество активных сессий

  • N2 - количество транзакций

  • N3 - количество запросов к СУБД в секунду.

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

Было принято решение изменить методику расчета, используя вектор:(N1, N2, N3, N4, N5), где:

  • N1 - количество страниц shared_buffer , прочитанных в секунду

  • N2 - количество страниц shared_buffer, записанных в секунду

  • N3 - количество страниц shared_buffer, измененных в секунду

  • N4 - количество завершенных запросов в секунду

  • N5 - количество зафиксированных транзакций в секунду

Метрика , как и в предыдущем варианте будет считаться как модуль вектора.

Tags:
Total votes 3: ↑3 and ↓0+3
Comments0

Мысли вслух

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

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

Разумеется, при условии правильной начальной настройке СУБД: work_mem, shared_buffers, autovacuum, etc.

P. S. Особенно вредно и абсолютно непродуктивно менять параметры СУБД во время аварийной ситуации(что как раз и очень любят настойчиво требовать разнообразные манагеры).

Tags:
Total votes 3: ↑3 and ↓0+3
Comments5

Современный стиль разработки информационных систем это:

  • Проводить оценку производительности при реальной нагрузке в продуктивном контуре, а не на тестовом стенде.

  • Не иметь метрик производительности информационной системы, оценивать производительность по обратной связи пользователей — «ой стало медленно работать».

  • Не проводить тестирование последствий изменений инфраструктуры на тестовом стенде, сразу проводить изменения в продуктиве.

Tags:
Total votes 7: ↑6 and ↓1+5
Comments0

Мысли вслух

А, что если сделать скрипт, который по cron, каждую минуту собирает результаты запросов к системным представлениям pg_stat_activity/pg_locks/etc., в течении последнего часа? Некий аналог черного ящика в самолете.

А при возникновении предаварийной/аварийной ситуации — глубину хранения увеличить.

Наверное, должно сильно помочь, при установлении корневой причины аварии информационной системы.

Tags:
Total votes 6: ↑6 and ↓0+6
Comments2

Information

Rating
Does not participate
Registered
Activity