Статистический анализ производительности СУБД PostgreSQL
Сводная статья для подготовки докладов на конференциях PgConf и Heisenbug по теме статистического анализа производительности СУБД PostgreSQL по состоянию на май 2025 .
Инцидент снижения производительности СУБД
Если угол наклона линии регрессии операционной скорости < 0 ,
И
угол наклона линии регрессии ожиданий > 0
Точка наблюдения
Конкретный момент времени, для которого фиксируются данные в ходе мониторинга, эксперимента или анализа инцидента. Выражается в минутах от начала периода собранных данных. Это базовый элемент, «кадр» временного ряда, на основе которого строятся все дальнейшие вычисления и графики.
Скользящая медиана
Статистический метод сглаживания данных, который эффективно подавляет резкие, кратковременные выбросы (аномалии). Для каждой точки временного ряда вычисляется медиана значений в заданном временном окне заданной размерности от данной точки:
- Например, при окне в 60 минут значение для минуты t будет рассчитана как медиана значений за минуты с t-60 по t.
Операционная скорость
Ключевой интегральный показатель производительности базы данных . Рассчитывается как сумма двух значений:
- количество успешно выполненных SQL-запросов (транзакций)
- количество обработанных или возвращённых строк данных.
Рост этого показателя обычно свидетельствует о хорошей производительности, а падение — о возможном возникновении проблем.
Для анализа трендов, используется его сглаженное значение, рассчитанное методом скользящей медианы.
WAIT_EVENT_TYPE (Тип события ожидания)
Тип события, которого ждёт обслуживающий процесс, если это ожидание имеет место; в противном случае — NULL.
Общая категория или класс ресурса, на котором процесс (например, обработчик запроса в СУБД) вынужден ожидать. Это высокоуровневая группировка, помогающая быстро классифицировать проблему.
WAIT_EVENT (Событие ожидания)
Имя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, а в противном случае — NULL.
Конкретное, низкоуровневое имя события, из-за которого процесс находится в состоянии ожидания. Это уточнение внутри типа (WAIT_EVENT_TYPE). Например, для типа IO событием может быть datafile read (чтение файла данных), а для типа Lock — transactionid (ожидание завершения другой транзакции).
Коэффициент корреляции
Числовая мера, показывающая силу и направление статистической связи между двумя изменяющимися во времени показателями. Его значение колеблется от -1 до +1.
Интерпретация значений:
+1: Полная прямая связь (оба показателя растут и падают синхронно).
От +0.7 до +1: Сильная прямая связь.
От +0.3 до +0.69: Умеренная или слабая прямая связь.
Около 0: Отсутствие линейной связи.
От -0.3 до -0.69: Умеренная или слабая обратная связь.
От -0.7 до -1: Сильная обратная связь.
-1: Полная обратная связь (показатели меняются в противофазе: один растет — другой падает).
Применение в анализе:
Отрицательная корреляция между Операционной скоростью и Ожиданий (Wait Events): чем сильнее отрицательное значение, тем очевиднее, что рост ожиданий напрямую «душит» производительность, снижая скорость обработки запросов.
Положительная корреляция между отдельным типом ожиданий (WAIT_EVENT_TYPE) и общим количеством ожиданий: указывает, насколько данный тип проблем вносит вклад в общее снижение производительности системы.
Взвешенная корреляция ожиданий (ВКО)
Score = Corr(WaitType, Total) * P(WaitType)
Corr ∈ [0, 1]: коэффициент корреляции между ожиданиями данного типа wait_event_type ∈ [BufferPin, Extension, IO, IPC, Lock, LWLock, Timeout] и всеми ожиданиями СУБД за выбранный период .
P ∈ [0, 1]: доля в процентах(деленная на 100) количества ожиданий данного типа wait_event_type ∈ [BufferPin, Extension, IO, IPC, Lock, LWLock, Timeout] ко всем ожиданиями СУБД за выбранный период .
Интегральный приоритет типа ожиданий wait_event_type
Используется для определения приоритетов различных типов ожиданий (wait_event_type) на основе четырёх показателей:
- коэффициента корреляции Пирсона (r),
- уровня значимости (p-value),
- взвешенной корреляции ожиданий (w)
- коэффициента детерминации (R²)
Коэффициент тренда
K=b′×R2
где:
- K — коэффициент тренда (положительный при ухудшении, отрицательный при улучшении);
- b′ — скорректированный наклон (в исходных единицах измерения метрики за шаг времени);
- R2 — коэффициент детерминации (от 0 до 1).
Абсолютная величина ∣K∣ характеризует выраженность тренда с учётом его статистической значимости: даже большой наклон при низком R2 даст небольшой вклад, и наоборот.