Добавить в корзинуПозвонить
Найти в Дзене
Postgres DBA

Прогнозирование инцидента производительности СУБД PostgreSQL с использованием цепи Маркова

Итог - предупреждение за 30 минут до инцидента.
GitHub - Комплекс pg_expecto для статистического анализа производительности и тестирования СУБД PostgreSQL
Все функции (mchain_predict_risk_1min, mchain_predict_risk_k, обёртки для 15, 30, 60 минут) возвращают набор из четырёх полей:
risk (REAL)
Оглавление

Начало работ :

📋Продолжение : прогнозирование инцидента , после проведения полного цикла обучения цепи Маркова на продуктивной нагрузке.

Итог - предупреждение за 30 минут до инцидента.

-2

GitHub - Комплекс pg_expecto для статистического анализа производительности и тестирования СУБД PostgreSQL

Подробная интерпретация результатов прогнозов цепи Маркова

1. Структура выходных данных всех прогнозных функций

Все функции (mchain_predict_risk_1min, mchain_predict_risk_k, обёртки для 15, 30, 60 минут) возвращают набор из четырёх полей:

risk (REAL)

  • Вероятность аварии (попадания в аварийное состояние) на заданном горизонте. Значение от 0.0 до 1.0.

curr_situation (TEXT)

  • Код ситуации, объясняющий, как был получен риск. Возможные значения:
  • 'unknown_state'
  • 'no_risk'
  • 'risk_calculated'

curr_transitions_to_risk (INT)

  • Количество прямых переходов из текущего состояния в любое аварийное состояние, зафиксированных в обученной матрице вероятностей.

curr_total_transitions_known (INT)

  • Общее число различных целевых состояний, в которые можно перейти из текущего состояния (согласно модели).

2. Интерпретация поля risk

Числовой смысл

  • risk – это оценка условной вероятности того, что за указанное количество минут (1, 15, 30, 60) система хотя бы один раз окажется в аварийном состоянии.
  • Для mchain_predict_risk_1min – вероятность перехода на следующей минуте.
  • Для mchain_predict_risk_k – вероятность хотя бы одного попадания в аварию за k шагов (минут), вычисленная через поглощающую цепь Маркова.

Диапазон значений

  • 0.0 – согласно модели, авария невозможна (нет переходов в аварийные состояния).
  • 0.05 – используется как априорная вероятность в случае, когда текущее состояние модели неизвестно (ситуация unknown_state).
  • >0.0 – модель оценивает ненулевой риск.

Практическая интерпретация (уровни риска)

  • < 0.01 (<1%) – риск крайне низкий, система стабильна.
  • 0.01 – 0.10 (1%–10%) – умеренный риск, рекомендуется мониторинг.
  • 0.10 – 0.30 (10%–30%) – значительный риск, желательно принять превентивные меры.
  • > 0.30 (>30%) – высокий риск, требуется немедленное вмешательство.
Важно: Прогнозы зависят от обученной модели и могут быть недостоверны, если модель имеет низкий рейтинг достоверности (см. раздел 6).

3. Интерпретация поля curr_situation

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

3.1 'unknown_state'

Когда возникает

  • Текущие метрики производительности (current_correlation, os_trend, wait_trend) отсутствуют (например, таблица cluster_stat_median пуста).
  • Или текущее состояние не найдено в справочнике state_descriptions (практически невозможно, если заполнены все 189 комбинаций).
  • Или в таблице markov_probabilities нет записей для данного состояния (состояние ни разу не встречалось в обучении).

Что означает

  • Модель не знает, как ведёт себя система из данного состояния. Возвращается априорная вероятность 0.05 (1–(0.95)^k для многошагового прогноза). Прогноз недостоверен.

Что делать

  • Дождаться, пока через mchain_train_step накопятся переходы из этого состояния. Если состояние появляется часто, но модель его не узнаёт – проверить, вызывается ли fill_state_descriptions() и не сброшены ли таблицы частот.

3.2 'no_risk'

Когда возникает

  • Текущее состояние известно, но в матрице вероятностей markov_probabilities нет ни одного перехода из него в аварийные состояния. То есть curr_transitions_to_risk = 0.

Что означает

  • Согласно накопленным данным (с учётом забывания), из текущего состояния никогда не было прямого перехода в аварию. risk возвращается как 0.0 (даже для многошагового прогноза, потому что поглощающая матрица при отсутствии исходных переходов даст нулевую вероятность).

Степень уверенности

  • Высокая, но только если модель достаточно обучена (рейтинг достоверности ≥3). При малом объёме данных может быть ложным (авария возможна, но ещё не встречалась).

3.3 'risk_calculated'

Когда возникает

  • Текущее состояние известно, и в модели есть хотя бы один переход из него в аварийное состояние (curr_transitions_to_risk > 0). Риск вычислен на основе вероятностей из markov_probabilities (для 1 минуты) или через поглощающую цепь (для k шагов).

Что означает

  • Модель сформировала оценку на основе реально наблюдавшейся статистики. Это основной рабочий режим.

4. Интерпретация полей curr_transitions_to_risk и curr_total_transitions_known

Эти поля помогают оценить, насколько статистически обеспечен прогноз.

curr_transitions_to_risk

  • Сколько различных аварийных состояний достижимо из текущего состояния за один шаг.
  • Чем больше это число, тем выше разнообразие сценариев аварии.
  • Не следует путать с вероятностью: даже если curr_transitions_to_risk = 10, но каждая из этих веток имеет очень малую вероятность, итоговый risk может быть низким.

curr_total_transitions_known

  • Общее число целевых состояний, в которые можно перейти из текущего состояния (включая неаварийные).
  • Если это число мало (например, 1–3), модель имеет бедное представление о поведении системы из данного состояния – прогноз может быть неточным.
  • Если число велико (близко к 189), значит состояние часто встречалось и из него наблюдалось много разнообразных переходов – прогноз более надёжен.

Рекомендация: Следить за ситуациями, когда curr_total_transitions_known меньше 5–10 – в таких случаях к прогнозу стоит относиться с осторожностью, даже если curr_situation = 'risk_calculated'.

5. Особенности многошаговых прогнозов (15, 30, 60 минут)

Как работают: Функции mchain_predict_risk_15min и т.д. вызывают mchain_predict_risk_k(k) с соответствующим k.

Математически: Используется поглощающая цепь Маркова, где все аварийные состояния сделаны поглощающими (из них нельзя выйти, вероятность остаться = 1). Риск за k шагов – это вероятность оказаться в любом поглощающем состоянии после k переходов.

Интерпретация по горизонтам

  • 15 минут – краткосрочная опасность, полезен для немедленных реакций.
  • 30 минут – среднесрочный тренд.
  • 1 час – показывает, насколько система склонна к аварии в принципе (стационарное поведение).

Важное свойство:

  • Для многошагового прогноза риск не обязан монотонно расти с k, потому что модель может иметь возвратные неаварийные состояния. Однако в большинстве реальных случаев риск с горизонтом растёт, но может насыщаться.

6. Как учитывать достоверность прогнозов (рейтинг надёжности)

Функция mchain_forecast_reliability() возвращает рейтинг от 0 до 5. Интерпретация:

  • 0 – Модель не обучена (менее 100 переходов). Прогнозы не использовать.
  • 1 – Очень мало данных (100–499). Прогнозы практически случайны.
  • 2 – Недостаточно данных (500–4999). Прогнозы нестабильны, можно смотреть только тренд.
  • 3 – Минимально достаточно, но возможны дрейфы. Прогнозы можно использовать с осторожностью, особенно при низких рисках.
  • 4 – Хорошая достоверность. Прогнозам можно доверять в большинстве ситуаций.
  • 5 – Отличная достоверность. Прогнозы максимально надёжны.
Рекомендуемый порог для принятия решений: рейтинг ≥ 3. При рейтинге 0–2 любые прогнозы следует воспринимать как экспериментальные.

7. Влияние адаптивного забывания на интерпретацию

Что такое забывание: Частоты переходов периодически умножаются на коэффициент (1 - alpha), где alpha может быть фиксированным или адаптивным (зависит от времени, прошедшего с последнего инцидента).

Как это сказывается на прогнозах

  • Модель забывает старые наблюдения. Прогноз отражает только недавнюю историю (последние дни–недели, в зависимости от alpha и интервала забывания).
  • Если инцидентов давно не было, alpha снижается до min_alpha (например, 0.01) – забывание замедляется, модель сохраняет более длинную память.
  • После инцидента alpha временно повышается – модель быстро «забывает» поведение, предшествовавшее инциденту, и адаптируется к новым условиям.

Интерпретация при активном забывании

  • Прогноз риска – это текущая тенденция, а не усреднённая статистика за всё время. Если система кардинально изменилась (например, после обновления ПО), адаптивное забывание позволит прогнозам отразить новую реальность в течение нескольких дней.

8. Полный пример практической интерпретации

Допустим, вызов mchain_predict_risk_15min() вернул:

  • risk = 0.23
  • curr_situation = 'risk_calculated'
  • curr_transitions_to_risk = 4
  • curr_total_transitions_known = 32

Расшифровка:

  • risk = 0.23 – вероятность аварии в ближайшие 15 минут составляет 23%. Это значительный риск.
  • ситуация risk_calculated – прогноз построен на реальных данных из модели.
  • 4 аварийных перехода – из текущего состояния есть 4 разных варианта попасть в аварию за 1 минуту. Это говорит о разнообразии путей к аварии.
  • известно 32 целевых состояния – модель достаточно хорошо изучила поведение из текущего состояния (богатая статистика).
  • рейтинг достоверности (отдельный вызов mchain_forecast_reliability) предположим равен 4 – прогнозу можно доверять.

Вывод: Система находится в состоянии с реальной и хорошо обоснованной угрозой аварии. Следует предпринять действия по стабилизации производительности.

9. Рекомендации по мониторингу

  • Интегрируйте mchain_health_check() в вашу систему мониторинга. Она вернёт статус OK, WARNING или CRITICAL с пояснением, если что-то не так (нет переходов, забывание не работает, высокий рост аварий).
  • Периодически запрашивайте mchain_reliability_report() для оценки качества модели.
  • Следите за ситуацией unknown_state – если она возникает часто, это указывает на проблемы со сбором метрик или на появление новых, ранее не виденных комбинаций корреляции/трендов.
  • Используйте прогнозы как индикатор раннего предупреждения, но решения о переключении режимов работы или автоматическом вмешательстве принимайте с учётом рейтинга достоверности и дополнительных правил (например, только если риск > 0.2 и рейтинг ≥ 3).

ℹ️Таким образом, предоставленная реализация даёт не просто число, а полноценный диагностический пакет, позволяющий оператору или автоматической системе понять, насколько можно доверять прогнозу и каковы его статистические основания.