Postgres для разработчиков: с нуля до продвинутого

17 участников

О чём курс

Олег Мифле разбирает прикладную работу с СУБД PostgreSQL — от оптимизации медленных запросов и настройки уровней изоляции транзакций до проектирования схем, репликации и устранения аварийных инцидентов в продакшене.

О чём курс

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

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

Для кого

Обучение ориентировано на разработчиков уровня middle и senior, а также на системных архитекторов. Программа рассчитана на специалистов, которые уже сталкивались со сложностями при использовании PostgreSQL в реальных проектах, но джуниоры также могут участвовать, если готовы к высокой сложности.

Для освоения тем необходимы:

  • владение любым языком программирования;
  • базовые знания SQL;
  • понимание базовых концепций Computer Science.

Что внутри

Программа охватывает ключевые инженерные аспекты работы с базой данных:

  • внутреннее устройство PostgreSQL, включая работу MVCC, процессы, shared buffers, WAL и autovacuum;
  • чтение планов выполнения запросов через команду EXPLAIN и оптимизацию SQL без добавления индексов;
  • проектирование реляционных схем, применение ограничений целостности, работу с типами данных и паттерны безопасных миграций без простоя сервиса;
  • стратегию индексации с использованием B-tree, покрывающих, частичных, GIN и BRIN индексов;
  • транзакции, блокировки, предотвращение дедлоков и паттерны конкурентной обработки данных;
  • масштабирование и отказоустойчивость: физическую и логическую репликацию, пулинг соединений через PgBouncer и партиционирование;
  • мониторинг состояния базы с помощью pg_stat_statements и pg_stat_activity, анализ логов и локализацию источников сбоев;
  • архитектурные решения и обоснование выбора PostgreSQL на System Design интервью.

Формат занятий

Курс включает 9 уроков в онлайн-формате. Занятия проходят в виде живых созвонов продолжительностью 1,5–2 часа дважды в неделю в нерабочее время, видеозаписи сохраняются. Дополнительно проводятся сессии вопросов и ответов, на которых обратную связь по домашним заданиям и лекциям даёт лично преподаватель без участия кураторов. Отработка практических сценариев выполняется на учебном стенде в docker-compose.

Об авторе

Олег Мифле — тимлид разработки в Т-Банке, руководитель команды в сервисах обслуживания. Ранее занимал позиции старшего разработчика в проектах ВКонтакте и Skyeng. Имеет более 15 лет опыта промышленной разработки и свыше 7 лет администрирования и эксплуатации PostgreSQL в продакшене с объёмами данных до 12 терабайт. Регулярно выступает с докладами о базах данных на профильных конференциях Highload++, Стачка, PHP Russia и Podlodka Crew.

Программа обучения

Урок №1. База по PgSQL и реляционным БД Урок №2. Внутреннее устройство PgSQL Урок №3. Запросы и производительность без индексов Урок №4. Проектирование модели данных Урок №5. Индексы Урок №6. Транзакции и конкурентный доступ Урок №7. Надёжность и масштабирование Урок №8. Мониторинг и troubleshooting Урок №9. Бонус. PostgreSQL в System Design

Спойлер: Подробно Урок №1. База по PgSQL и реляционным БД Теория: зачем разработчику понимать Postgres глубже "ORM + SELECT" история и философия Postgres: расширяемость, надёжность, MVCC реляционная модель в прикладном виде: сущности, связи, ключи, ограничения базовый DDL: таблицы, PK/FK, UNIQUE/CHECK, типы данных Практика: поднимаем учебный стенд: docker-compose, доступ, расширения, генерация данных Домашнее задание: поднять стенд применить миграции (стартовый DDL) загрузить тестовые данные выполнить набор "sanity" SQL-запросов и прислать результаты Результат: понимаешь роль схемы, ключей и ограничений в качестве продукта можешь описать предметную область в виде минимального DDL под конкретный сценарий Урок №2. Внутреннее устройство PgSQL Разбираем, почему простой UPDATE может раздуть таблицу в разы, куда девается место и почему «база тормозит без причины» — через внутреннюю кухню MVCC, WAL и autovacuum, которые обычно скрыты от разработчика. Теория: архитектура процессов: backend, shared buffers, bgwriter/checkpointer/walwriter, autovacuum как данные лежат на диске концептуально: heap/pages, почему “update” не перезаписывает строку MVCC: снимки, видимость версий, dead tuples WAL: зачем нужен, crash recovery, связь с репликацией Практика: ... Домашнее задание: «раздуть» БД до массовых UPDATE / DELETE измерить рост и базовые метрики (до / после) коротко описать, почему так произошло (MVCC + dead tuples) Результат: умеешь объяснить MVCC и последствия для чтения / записи знаешь, какие системные представления смотреть для базовой диагностики активности Урок №3. Запросы и производительность без индексов Разбираем, как читать план запроса, находить структурные ошибки в SQL и ускорять запросы, не создавая ни одного индекса и не трогая схему. Теория: как думать про запрос: селективность, кардинальности, объём промежуточных данных EXPLAIN (ANALYZE, BUFFERS): как читать план на уровне разработчика типовые причины медленных запросов без индексов техники оптимизации без индексов Практика: ... Домашнее задание: оптимизировать 5 «плохих» запросов переписыванием и приложить исходный SQL, новый SQL, план до / после и короткое объяснение эффекта Результат: умеешь читать план и находить лишнюю работу знаешь, как ускорять запросы можешь доказать улучшение по плану и метрикам в формате «до / после» Урок №4. Проектирование модели данных Учимся проектировать «защитный слой» в БД и эволюционировать схему без катастроф, когда база превращается в «свалку», ошибки данных чинятся вручную, а миграции ломают прод. Теория: нормализация vs денормализация: критерии выбора сonstraints как бизнес-правила: PK/FK/UNIQUE/CHECK, дефолты, nullable/non-nullable типы данных: деньги / время / uuid когда нужны domain / enum JSONB: когда оправдан, где границы миграции: expand / contract, backward compatibility, опасные операции Практика: ... Домашнее задание: переработать схему одного кейса: добавить constraints, исправить типы и описать миграционный план Результат: умеешь проектировать схему, которая ловит ошибки приложения знаешь, как выбирать типы и ограничения под доменную модель понимаешь, как делать миграции безопасно для продакшена Урок №5. Индексы Разбираем, почему «создал индекс — не помогло», как выбирать индексы под задачу, когда составной / частичный / покрывающий индекс реально спасет, а когда он только съедает место и замедляет вставки. Теория: B-tree: селективность, порядок колонок, range queries Covering indexes (INCLUDE), expression indexes Partial indexes для «горячих» подмножеств GIN / BRIN и когда они реально нужны Цена индексов: write amplification, обслуживание, bloat Практика: ... Домашнее задание: для набора запросов предложить индексы + объяснить ожидаемое изменение плана. Приложить планы до / после после создания индексов Результат: умеешь выбирать индекс под конкретный кейс и план понимаешь trade-off чтения и записи можешь собрать минимальную индексную стратегию под задачу Урок №6. Транзакции и конкурентный доступ Разбираем, откуда берутся «рандомные» дедлоки и двойные списания, какой уровень изоляции реально нужен, и как проектировать конкурентные операции без гонок и зависаний — от очередей до резервирования. Теория: ACID и уровни изоляции в PG: что гарантируется и где ловушки Locks: что именно блокируется и почему Дедлоки: типовые причины, как воспроизвести и диагностировать Паттерны: idempotency, upsert, SKIP LOCKED, оптимистичные / пессимистичные подходы Advisory locks Практика: ... Домашнее задание: 2–3 задачи на конкурентный доступ (очередь / резерв / списание) с выбором изоляции и объяснением доказать корректность сценария на уровне инвариантов Результат: умеешь проектировать конкурентные операции знаешь, как предупредить, найти и устранить дедлоки понимаешь, почему «длинные транзакции» убивают систему Урок №7. Надёжность и масштабирование Разбираем, почему после добавления реплики может стать хуже, как и зачем проверять бэкапы, когда внедрять партиционирование, и почему коннекты к базе вдруг заканчиваются. Теория: physical vs logical replication: когда что выбирать backup / restore и идея PITR failover и влияние на приложение: таймауты, лаг, read-after-write connection pooling (pgbouncer): зачем, режимы, типовые грабли партиционирование: критерии, ключ, жизненный цикл. шардирование: когда внедрять и границы применения (обзорно) Практика: ... Домашнее задание: настроить реплику показать лаг отработать сценарий чтения с реплики сделать партиционирование events по времени + сравнение запросов Результат: понимаешь базовые стратегии отказоустойчивости для Postgres понимаешь, когда партиционирование даёт эффект, а когда усложняет жизнь Урок №8. Мониторинг и troubleshooting Учимся собирать health check базы и искать источник инцидента. Теория: pg_stat_statements: как найти самые дорогие запросы pg_stat_activity: что сейчас происходит, кто блокирует, кто ждёт симптомы проблем vacuum / bloat на уровне разработчика логи: slow queries, deadlocks, минимальные настройки Практика: ... Домашнее задание: собрать «DB health report»: набор диагностических SQL + интерпретация результатов предложить алерты / пороги и обосновать Результат: умеешь собрать быстрый health check PostgreSQL по набору запросов можешь локализовать причину: запросы vs блокировки vs обслуживание знаешь необходимый минимум набора метрик и алертов для команды разработки Урок №9. Бонус. PostgreSQL в System Design Разбираем, как обосновать выбор Postgres на System Design интервью, чем он отличается от других БД в боевых сценариях, и соберем финальный артефакт — дизайн схемы, индексов, мониторинга и HA под конкретную нагрузку. Теория: PG как компонент архитектуры: границы ответственности, where-to-cache, where-to- queue, где OLTP заканчивается highload-паттерны вокруг PG: идемпотентность, outbox, read-model, батчи, лимиты соединений Postgres vs MySQL / InnoDB vs SQL Server / Oracle — когда и что выбирать вопросы с собеседований: планы, индексы, транзакции, блокировки, vacuum, replication Практика: мини-дизайн под один из кейсов: схема + запросы + индексы + мониторинг + HA Домашнее задание: сделать финальный документ по выбранному кейсу: схема, ключевые запросы, индексная стратегия, миграции, мониторинг, HA / backup реализовать нагрузочный прогон, сделать выводы и составить план улучшений Результат: можешь обосновать решения по базе в system design: trade-offs, риски, эксплуатация готов к большинству вопросов по БД на system design интервью умеешь говорить и проектировать на уровне продукта / нагрузки / рисков

Складчина создана 14 июля 2026 г. · описание обновлено 25 октября 2026 г.

Теги курса

Инструменты
3 787 ₽ 54 700 ₽