hackathon-tower-2025
Система мониторинга и оптимизации PostgreSQL с AI
Когда работаешь с PostgreSQL в продакшене, постоянно возникает вопрос: "А что если нагрузка изменится? Как быстро система адаптируется?" Эта система — попытка ответить на этот вопрос автоматически.
Что это такое
Представь, что у тебя есть умный помощник, который:
- Смотрит на метрики PostgreSQL в реальном времени
- Понимает, какой тип нагрузки сейчас идет (OLTP, OLAP, смешанная и т.д.)
- Автоматически подкручивает настройки для максимальной производительности
- Показывает все это в удобном веб-интерфейсе
И все это работает без твоего участия. Просто запустил и забыл.
Ключевые фичи
1. AI-классификатор профилей нагрузки
Система умеет определять, что происходит с базой прямо сейчас. Это не просто "много запросов" или "мало запросов" — она различает 9 разных профилей:
- Classical OLTP — классические транзакции, как в банковских системах
- OLAP Analytics — тяжелые аналитические запросы (выборки и агрегации)
- HTAP Hybrid — смешанная нагрузка (и транзакции, и аналитика одновременно)
- High-Concurrency OLTP — очень много параллельных сессий (например, микросервисы или HFT)
- Streaming IoT — постоянная потоковая запись данных от большого количества устройств
- Read-Heavy Catalog — преимущественно чтение, каталоги и справочники
- Batch ETL — ночные массовые загрузки и обновления данных
- Queue-Driven — профили с большим числом блокировок, характерно для очередей и event sourcing
- Replication-Sensitive — нагрузка с учетом задержек репликации, как в банке или PCI DSS системах
Как это работает? Нейросеть анализирует метрики (TPS, активные сессии, I/O wait, блокировки) и выдает профиль с вероятностями. Точность — больше 95%.
График показывает, как модель училась распознавать профили. Видно, что точность стабильно растет и достигает 95%+
Матрица показывает, насколько хорошо модель различает разные профили. Чем темнее диагональ — тем лучше
Для каждого профиля видно, насколько точно модель его определяет. Все значения выше 90%
2. Reinforcement Learning оптимизатор
Это самая интересная часть. Система не просто наблюдает — она действует. Используя Deep Q-Network (DQN), она учится оптимизировать параметры PostgreSQL:
— размер буферного кэшаshared_buffers— память для операций сортировкиwork_mem— память для обслуживанияmaintenance_work_mem— оценка доступного кэша ОСeffective_cache_size— стоимость случайного доступа к дискуrandom_page_cost— параллельность I/O операцийeffective_io_concurrency
Каждые 10 секунд система смотрит на метрики, принимает решение (увеличить/уменьшить параметр) и смотрит на результат. Со временем она учится делать это лучше.
Как менялись параметры PostgreSQL во время обучения. Видно, что система экспериментирует и находит оптимальные значения
3. Веб-интерфейс в реальном времени
Вместо того чтобы постоянно лазить в консоль и смотреть логи, все отображается в браузере. Графики обновляются каждые 5 секунд через WebSocket, так что задержек практически нет.
Что видно:
- Все ключевые метрики (TPS, сессии, I/O wait, блокировки, cache hit ratio)
- Текущий профиль нагрузки с вероятностями
- Рекомендации RL оптимизатора
- Интерактивные графики всех метрик
- Управление генератором нагрузки
4. Генератор нагрузки
Чтобы система могла учиться и тестироваться, нужна нагрузка. Встроенный генератор позволяет запускать 9 профилей нагрузки, соответствующих реальным сценариям:
- Classical OLTP — классические транзакционные системы (банки, ERP). Короткие запросы, умеренное число однотипных транзакций.
- OLAP Analytics — тяжелые аналитические запросы: большие выборки, агрегации, сложные джоины. Мало транзакций, но каждый запрос "тяжелый".
- HTAP Hybrid — смешанная нагрузка: одновременно выполняются и быстро транзакционные, и аналитические запросы.
- High-Concurrency OLTP — очень много параллельных сессий (например, микросервисы, HFT), высокий TPS, высокая конкуренция за ресурсы.
- Streaming IoT — постоянный поток INSERT/UPDATE от большого числа устройств, часто с низкой латентностью, иногда с пиками поступления данных.
- Read-Heavy Catalog — преобладающее чтение данных (SELECT), как в каталогах, справочниках и CMS-системах.
- Batch ETL — ночные массовые загрузки и обновления; короткое время, но очень интенсивная запись и обновление больших объемов.
- Queue-Driven — нагрузка, связанная с очередями и event sourcing: высокая конкуренция, много блокировок, частые короткие транзакции на изменение состояния.
- Replication-Sensitive — приложения, критичные к задержкам репликации (например, банки, PCI DSS): умеренные транзакции, но повышенное внимание к отставанию реплик и размеру WAL.
Можно запускать каждый профиль отдельно или включить режим случайного переключения профилей (каждые 1-3 минуты) — это удобно для обучения RL-агента и проверки классификатора.
5. Обучение и визуализация
Система генерирует кучу графиков, которые помогают понять, что происходит:
Как уменьшались потери (loss) во время обучения классификатора
F1-score — ключевая метрика для классификации. Видно, что модель стабильно улучшается
Для каждого профиля видно, насколько точно модель его находит (precision) и насколько полно (recall)
Сколько правильных и неправильных предсказаний делает модель
Быстрый старт
Самый простой способ — запустить все одной командой:
Откроется браузер с веб-интерфейсом на http://localhost:5000. Система автоматически:
- Запустит генератор случайной нагрузки
- Начнет собирать метрики
- Классифицировать профили
- Оптимизировать параметры PostgreSQL
Все в реальном времени, без дополнительной настройки.
Что нужно для работы
- Python 3.8+
- PostgreSQL 12+ (можно использовать симуляцию, без реальной БД)
- 4GB RAM (8GB лучше)
- 10GB свободного места (если генерировать тестовую БД)
Структура проекта
├── backend/ # Веб-сервер и логика
│ ├── app.py # Flask сервер с WebSocket
│ ├── metrics_simulator.py # Симулятор метрик (если нет реальной БД)
│ └── load_generator.py # Генератор нагрузки
│
├── frontend/ # Веб-интерфейс
│ ├── templates/index.html
│ └── static/js/app.js
│
├── classificator/ # AI классификатор
│ ├── train_for_simulator.py # Обучение модели
│ ├── predict.py # Предсказание профилей
│ └── charts/ # Графики анализа
│
├── reinforcement/ # RL оптимизатор
│ ├── rl_optimizer.py # DQN модель
│ └── training_plots/ # Графики обучения RL
│
├── images/ # Графики обучения классификатора
└── train_rl_agent.py # Скрипт обучения RL модели
Обучение моделей
Классификатор
Если хочешь переобучить классификатор на своих данных:
Модель сохранится в , а графики обучения — в .
RL оптимизатор
Обучение RL модели занимает больше времени, но это того стоит:
Во время обучения система будет экспериментировать с параметрами PostgreSQL, поэтому используй только на тестовой системе! Графики обучения сохранятся в .
Как это работает под капотом
-
Сбор метрик: Каждые 5 секунд система собирает метрики из PostgreSQL (или симулирует их, если БД нет)
-
Классификация: Нейросеть анализирует метрики и определяет профиль нагрузки. Результат — профиль + вероятности для каждого класса
-
Оптимизация: RL модель смотрит на текущее состояние (метрики + параметры) и решает, что изменить. Действие выполняется, через 10 секунд смотрим на результат и обновляем модель
-
Визуализация: Все это отправляется через WebSocket в браузер и отображается в реальном времени
Важные замечания
⚠️ RL оптимизатор изменяет настройки PostgreSQL! Используй только на тестовой системе.
⚠️ Генератор нагрузки может сильно нагружать систему. Если видишь, что все тормозит, останови генератор.
⚠️ Генерация тестовой БД занимает время. Если запускаешь , будь готов подождать 20-60 минут.
Что дальше
Система уже работает и готова к использованию. Можно:
- Запустить и посмотреть, как она работает
- Переобучить модели на своих данных
- Добавить новые профили нагрузки
- Расширить список оптимизируемых параметров
- Интегрировать с реальной системой мониторинга
Технологии
- Backend: Flask, Flask-SocketIO
- Frontend: Bootstrap 5, Chart.js, Socket.IO
- AI/ML: TensorFlow/Keras, scikit-learn
- RL: Deep Q-Network (DQN)
- БД: PostgreSQL
Лицензия
Проект создан для Hackathon VTB x Tower 2025.
Готово к использованию! Запусти и посмотри, как система сама оптимизирует PostgreSQL. 🚀