Оптимизация PostgreSQL и медленных запросов
Найдем, что замедляет PostgreSQL, прежде чем увеличивать сервер
Обсудить задачуКогда это полезно
Страницы открываются медленно, база упирается в CPU или соединения, а расширение сервера дает временный эффект. Начинаем с конкретной операции: что выполняется, сколько занимает и чего ждет запрос
Как устроена наша инфраструктура
- КластерKubernetes, GitLab CI и Argo CD
- НаблюдаемостьOpenTelemetry, VictoriaMetrics, Grafana, Loki и Sentry
- ДанныеPostgreSQL, Redis и Kafka в проде Neurolove Studio
Как устроим работу
Зафиксируем симптомы
Соберем обезличенные запросы, планы и метрики. Выберем операции для сравнения
Проверим причины
Разберем индексы, чтение, блокировки и пул подключений. Для pgx, Gorm и PgBouncer учтем особенности приложения
Проверим изменения
Испытаем их в согласованной среде, подготовим миграции и откат. После внедрения повторим измерение
Что получаете
- Перечень проблемных операций и причин задержки
- Рекомендации по запросам, индексам и соединениям
- Согласованные миграции и изменения приложения
- Сравнение задержек, нагрузки и ошибок до и после
Как проверим результат
- Сравниваем один набор операций на сопоставимых данных и нагрузке
- Проверяем не только время одного запроса, но и хвост задержек, ошибки и влияние на запись
От чего зависят стоимость и сроки
Оценка зависит от числа сценариев, объема данных и возможности воспроизвести нагрузку. Изменение бизнес-логики и схемы согласуем до внедрения
Диагностика с фиксированной ценой, смета этапа после нее, демо после каждого спринта. После любого этапа можно остановиться — результат остается у вас. Подробнее в «Анатомии цены»
Перед началом
01Можно начать без данных клиентов?
Для первичной диагностики подойдут обезличенные планы, статистика и метрики. Состав доступов согласуем отдельно
02Обязательно нужен PgBouncer?
Нет. Пул подключений не исправляет плохой план запроса. Выбор зависит от измерений
03Гарантируете ускорение в несколько раз?
Такую цифру нельзя обещать до диагностики. Мы фиксируем исходные показатели и проверяем эффект изменений