Мониторинг: avarage time vs percentile
Всем привет! Для всех, кто сталкивался с мониторингом или любым подсчетом большого количества данных, сталкивался с таким понятием как "среднее значение".
Но истинно ли оно?
Давайте разберем, что есть avg и percentile.
Avg - среднее арифметическое нескольких чисел, сумма этих чисел, которую разделили на количество слагаемых.
Процентиль(он же квантиль) - это определённая часть выборки данных. Чаще всего используют 50, 75, 90, 99 процентили.
Если со средним значением все понятно, то процентиль проще пояснить на примере. Допустим, у нас есть 10 баз данных, на которые стабильно поступают SQL запросы. Мы знаем, что в среднем наша норма ответа на один тяжеловесный запрос около 1000ms в одной БД. Но одна из БД сегодня под повышенной нагрузкой, и не справляется с нагрузкой.
Возьмем значение для последней БД 19000ms. Если считать среднее значение, то выйдет такая картина:
(9000 + 19000) \ 10 = 2 800 ms время выполнения запроса для каждой БД. Что это значит? Имея такую картину, мы первым делом осознаем, что остальные 9 серверов должны были превысить допустимый лимит в условных 1500ms. Но если проверить вручную, то выяснится, что остальные 9 БД обрабатывают тяжеловесный запрос все так же 1000ms.
Возьмем для подсчета 50-й и 99-й процентиль.
Для его подсчета нам потребуется набор входящих данных.
1121; 983; 1200; 891; 1068; 1042; 1000; 1010; 999; 19000;
Считается он по этой формуле:
Где P-й процентиль списка из N упорядоченных по величине чисел (от меньших к большим) является наименьшее в списке число, которое больше, чем N процентов всех чисел исследуемого ряда. Например, для приведенного выше примера с временем выполнения запроса, 99-й процентиль означает время выполнения, которое больше, чем время выполнения 99% других БД.
50-й процентиль будет равен 1 026, это будет являться истинным средним значением для большинства серверов. Но откидывать из мониторинга последний сервер так же нельзя. Для этого мы считаем 99-й процентиль. Он будет равен 17 398.
Конечно вручную вам считать не придется, так как это умеют делать и системы мониторинга и прочие инструменты.
Когда мы посчитали процентили, мы можем их визуализировать на графиках, на которых сразу будет понятно, в каком случае проблемы имеют масштабный характер или же единичный.
Для визуализации своих метрик я использую grafana. Выглядеть это будет вот так:
(график просто для примера, он не является визуализацией моих подсчетов)
Краткая мораль avg - зло(в большинстве случаев), процентиль - добро. Всем спасибо за внимание.
P.S. для подсчета процентилей использовался онлайн калькулятор.
Лига Сисадминов
2.2K постов18.8K подписчиков
Правила сообщества
Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.