ТестированиеНагрузочное тестированиеИнженер по производительности

В отчёте нагрузочного теста p99 задержки строится по гистограмме с широкими интервалами. Как размер интерва...

В отчёте нагрузочного теста p99 задержки строится по гистограмме с широкими интервалами. Как размер интервалов влияет на точность этого показателя?

Проходите собеседования с ИИ помощником Hintsage

Краткий ответ

Широкие интервалы гистограммы делают p99 оценочным: становится неизвестно, где именно внутри выбранного интервала находится 99-й процентиль. Поэтому отчёт может показать заметно завышенное или заниженное значение относительно истинной задержки, особенно рядом с границей SLA.

Чем уже интервалы в области целевого p99, тем точнее оценка, но тем больше объём метрик и сложнее поддержка схемы измерений. Если нужна точная задержка каждого запроса, гистограмма не заменяет исходные наблюдения или другой механизм сбора распределения.

Исторический контекст

Гистограммы применяют, чтобы описывать распределение задержек при ограниченной памяти и небольших накладных расходах. Хранить время каждого запроса дорого, а одного среднего значения недостаточно для анализа хвоста распределения, где находятся p95 и p99.

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

Постановка проблемы

Предположим, целевой p99 должен быть не выше 500 миллисекунд, а гистограмма имеет интервалы от 400 до 600 миллисекунд. Если 99-й процентиль попал в этот диапазон, по агрегированным данным нельзя установить, равен он 401, 499 или 599 миллисекундам.

Из-за этого команда может ошибочно принять сервис за нарушающий SLA или, наоборот, решить, что запас по SLA есть. Особенно опасна грубая сетка интервалов вокруг порогов SLA и резких изменений производительности.

Подробное решение

Гистограмма хранит границы интервалов и число наблюдений, не превышающих каждую границу. Для поиска p99 сначала находят интервал, в котором накопленная доля запросов достигает 99%. Точное положение процентиля внутри этого интервала неизвестно, поэтому системы обычно оценивают его интерполяцией или возвращают значение, связанное с границей интервала.

Если интервал широк, ошибка оценки может быть сопоставима с разницей между успешным и неуспешным прохождением SLA. Приближённо максимальная неопределённость ограничена шириной интервала, в который попал процентиль, хотя конкретная ошибка зависит от распределения значений внутри него и метода интерполяции.

Практический выбор границ должен учитывать область интереса. Интервалы делают более плотными около SLA, ожидаемого p99 и других важных порогов, а для очень малых и очень больших задержек допускают более крупные диапазоны. При этом слишком большое число интервалов увеличивает объём метрик и стоимость их хранения и обработки.

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

Ситуация из практики

В нагрузочном тесте платёжного сервиса SLA для оформления заказа составлял 800 миллисекунд. Гистограмма имела границы 500 и 1000 миллисекунд, поэтому отчёт показывал p99 около 1000 миллисекунд, хотя команда не могла определить, превышает ли реальный p99 порог 800 миллисекунд.

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

Выбрали более плотные интервалы в диапазоне 700–900 миллисекунд и более крупные интервалы за его пределами. Это позволило различать прохождение SLA и его нарушение без хранения каждого измерения. После изменения схемы стало видно, что p99 действительно находится около 760 миллисекунд, а прежнее значение около 1000 было следствием грубой агрегации.

Что кандидаты часто упускают

  1. Можно ли считать p99 точным, если он попал в узкий интервал?

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

  1. Что произойдёт, если изменить границы интервалов между двумя тестами?

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

  1. Достаточно ли увеличить точность гистограммы, если в тесте мало запросов?

Нет. При малом числе наблюдений сам p99 статистически нестабилен: одно или несколько медленных запросов могут сильно изменить хвост. Более узкие интервалы уменьшают ошибку агрегации, но не компенсируют недостаточный объём выборки; поэтому нужно оценивать и точность гистограммы, и достаточность числа наблюдений.