S/02базы данных

Оптимизация и проектирование баз данных PostgreSQL

Аудит и оптимизация базы данных PostgreSQL — это разбор реальных планов выполнения запросов, индексов, блокировок и настроек сервера, после которого медленные места переписываются, а не описываются в отчёте. Мы работаем на обезличенной копии продакшена, показываем EXPLAIN ANALYZE до и после и правим схему, индексы и конфигурацию до измеримого результата.

Обсудить задачуПервые находки — в первый день, отчёт — за 3–5 рабочих дней, ответ в течение 2 часов

Какие задачи закрываем

Продакшен тормозит прямо сейчас

Запросы, которые раньше шли 50 мс, теперь идут секунды, и с ростом данных становится только хуже. Начинаем с pg_stat_statements и планов выполнения, а не с совета купить сервер побольше.

Схему собирали на ходу

Таблицы росли вместе с продуктом: денормализация там, где не надо, JSON вместо связей, индексов либо нет, либо их два десятка на таблицу. Перепроектируем схему и переносим данные версионными миграциями.

Импортозамещение и переезд на PostgreSQL

Перенос с MS SQL, Oracle или MySQL: маппинг типов, переписывание хранимых процедур, перенос исторических данных и переключение через логическую репликацию — без многочасового окна простоя.

Бэкапы, которые никто не восстанавливал

Дамп раз в сутки на тот же сервер — это не бэкап. Настраиваем pgBackRest или WAL-G с PITR, отдельным хранилищем и регулярной проверкой восстановления, чтобы вы знали реальное время возврата в строй.

Аналитика мешает продакшену

Тяжёлые отчёты ходят в ту же базу, что и приложение, и роняют её в конце месяца. Выносим аналитику на реплику или в ClickHouse либо BigQuery и оставляем в PostgreSQL только оперативные данные.

Блокировки, дедлоки и кончившиеся соединения

Приложение упирается в max_connections, длинные транзакции блокируют друг друга, автовакуум не успевает. Ставим pgBouncer, разбираем pg_locks и приводим транзакции к предсказуемой длительности.

Как идёт работа

  1. Бесплатный разбор ситуации

    1 день

    Созвон на 30–40 минут: симптомы, версия PostgreSQL, объём базы, где она размещена. На выходе — гипотезы о причине и честная оценка, сколько займёт работа. Ничего не стоит.

  2. NDA и доступ

    1 день

    Подписываем NDA до того, как что-то получим. Работаем на обезличенной копии или read-only реплике; в продакшен заходим только под согласованные задачи и с фиксацией всех выполненных команд.

  3. Диагностика

    2–3 дня

    Снимаем pg_stat_statements, разбираем топ запросов через EXPLAIN (ANALYZE, BUFFERS), смотрим неиспользуемые и недостающие индексы, блокировки, автовакуум, раздувание таблиц и конфигурацию сервера.

  4. Отчёт с планами до и после

    1 день

    Список правок по приоритету: что даёт ускорение сразу, что требует изменений в коде, что — в схеме. По ключевым запросам показываем план до и замеренное время после правки на копии базы.

  5. Внедрение

    3–10 дней

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

  6. Контрольный замер и передача

    1–2 дня

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

Стек

Стек выбирается под задачу, а не наоборот: девять из десяти работ — это PostgreSQL и инструменты вокруг него. Аналитику переносим в ClickHouse или BigQuery только тогда, когда реплики PostgreSQL действительно перестаёт хватать.

  • PostgreSQL 16
  • pg_stat_statements
  • EXPLAIN (ANALYZE, BUFFERS)
  • pgBouncer
  • Patroni и потоковая репликация
  • pgBackRest / WAL-G с PITR
  • Логическая репликация и Debezium
  • Версионные миграции (Flyway, node-pg-migrate)
  • ClickHouse
  • Redis
  • BigQuery
  • Prometheus + Grafana + postgres_exporter

Сколько стоит

Аудит

от 60 000 ₽ / от $600

Около 20 часов по ставке от 3 000 ₽ в час: сбор статистики, разбор топ-20 запросов по суммарному времени, проверка индексов, блокировок, автовакуума, конфигурации и бэкапов. Отчёт с планами выполнения и приоритетным списком правок за 3–5 рабочих дней.

Аудит и внедрение

от 150 000 ₽ / от $1 500

Аудит плюс сами правки: индексы, переписанные запросы, партиционирование крупных таблиц, pgBouncer, настройка сервера, замер до и после. Цену двигают объём базы, количество проблемных запросов и то, нужно ли трогать код приложения.

Проектирование или миграция

от 250 000 ₽ / от $2 500

Схема с нуля для нового продукта либо перенос с MS SQL, Oracle или MySQL на PostgreSQL: маппинг типов, перенос данных, логическая репликация, переключение, репликация и бэкапы на новом контуре. Цена зависит от числа таблиц и логики в хранимых процедурах.

Цены указаны справочно и не являются публичной офертой (п. 1 ст. 437 ГК РФ). Итоговая стоимость, объём работ и сроки фиксируются в договоре или счёте после обсуждения задачи.

Кейс по теме

CRM для крупной сервисной компании в HoReCa мы вели с нуля, включая схему данных — за время проекта она прошла 89 миграций и обслуживает 12+ модулей. Права доступа живут на уровне данных: 9 ролей против 87 разрешений, а не проверки, разбросанные по коду. Это ровно та работа со схемой, которую мы делаем, когда команда просит перепроектировать базу под рост.

Смотреть кейс KMD

Частые вопросы

Сколько стоит аудит базы данных?
Аудит стоит от 60 000 ₽ / от $600 — это около 20 часов по ставке от 3 000 ₽ / $30 в час. В сумму входят сбор статистики, разбор топовых запросов, проверка индексов, блокировок, автовакуума и бэкапов, отчёт с планами выполнения. Если по итогам вы берёте внедрение, аудит не оплачивается заново — он засчитывается в работы. Первичный разбор на созвоне бесплатный.
Нужен ли вам доступ к нашей продакшн-базе?
Для аудита — нет. Достаточно обезличенной копии, read-only реплики или даже выгрузки: pg_stat_statements, схема, планы выполнения, настройки сервера. NDA подписываем до того, как что-то получим. Если на этапе внедрения нужны действия на проде, они идут по согласованному списку задач, в оговорённое окно и с логом всех выполненных команд — остановить работу вы можете в любой момент.
Как долго идет аудит и когда будет результат?
Отчёт — через 3–5 рабочих дней после того, как мы получили доступ к данным. Первые находки обычно появляются в первый же день: топ запросов по суммарному времени виден сразу после снятия pg_stat_statements, и мы отправляем их не дожидаясь конца аудита. Внедрение правок занимает ещё от 3 до 10 рабочих дней — зависит от того, сколько нужно менять в схеме и в коде.
Вы гарантируете ускорение или просто отдаете отчет?
Мы не продаём отчёт как конечный продукт. По каждому проблемному запросу фиксируем план и время до правки и после неё на копии вашей базы — это измеримая цифра, а не обещание. Если ускорение упирается в архитектуру приложения, говорим об этом прямо и предлагаем, что менять. На выполненные работы действует месяц гарантии: баги в том, что сделали мы, чиним бесплатно.
Придется ли останавливать сервис на время работ?
В подавляющем большинстве случаев нет. Индексы создаются CONCURRENTLY, изменения схемы разбиваются на обратно совместимые шаги, тяжёлые миграции данных идут пачками в фоне. Простой обсуждается заранее и только там, где он неизбежен — например, при финальном переключении на другую СУБД, и там речь обычно о минутах, а не о ночи.
Можно ли обойтись оптимизацией вместо покупки более мощного сервера?
Чаще всего да, и это заметно дешевле. Типичная картина: один-два запроса без подходящего индекса дают основную нагрузку, и после правки база спокойно помещается на прежнем железе. Более мощный сервер осмыслен, когда упор идёт в диск или в объём данных, который физически не влезает в память. По итогам аудита мы скажем, что именно у вас, и если апгрейд действительно нужен — назовём конфигурацию.
Что делать, если проблема окажется не в базе, а в коде приложения?
Скажем об этом и покажем, где именно. Частый случай — N+1 запросы из ORM, отсутствие пагинации или транзакции, висящие открытыми на время внешнего HTTP-вызова. Мы полноценно разрабатываем, а не только администрируем БД, поэтому можем не просто указать на проблему, а переписать эти места вместе с вашей командой — или сами, если свободных рук нет.
Поможете перейти с зарубежной СУБД на PostgreSQL?
Да, это одна из основных задач: перенос с MS SQL, Oracle или MySQL. Работа состоит из маппинга типов, переписывания хранимых процедур и триггеров, переноса исторических данных, настройки логической репликации между старой и новой базой и короткого переключения. Такие проекты начинаются от 250 000 ₽ / $2 500; точная оценка зависит от числа таблиц и объёма логики внутри самой СУБД.

Расскажите, что тормозит

Опишите симптомы, версию PostgreSQL и примерный объём базы — в рабочее время вернёмся в течение 2 часов с гипотезами и оценкой. Разбор бесплатный и ни к чему не обязывает.

Обсудить задачу
Аудит и оптимизация базы данных PostgreSQL — Corexy