Перейти к содержанию
Главная Статьи Лабораторные PostgreSQL Advanced для системного аналитика и архитектора
PostgreSQL Advanced 🧪 Лаборатория
Анастасия Чекушина Анастасия Чекушина 25 апр 2026 · 15 мин 🧪 Лаборатория

Лабораторная работа «PostgreSQL Advanced для системного аналитика и архитектора»

Сложность: █████░░░░░ 5/10
Формат: Онлайн, 4 часа · Автор: Анастасия Чекушина · Направление: Backend
Инструменты: 🐘 PostgreSQL · 🔧 psql · 🐳 Docker

Зачем участникам эта лабораторная

Когда система растёт, проблемы обычно начинаются не из-за одного "неудачного запроса", а из-за того, что таблица когда-то была спроектирована слишком упрощённо:

  • важные поля спрятаны внутри сложной структуры, а не вынесены в отдельные колонки;
  • индексы не подходят под реальные рабочие запросы;
  • объём данных растёт, и запросы начинают тормозить;
  • в таблицу постоянно пишут новые данные, поэтому что-то менять страшно.

В этот момент системному аналитику или архитектору уже мало просто знать SQL на базовом уровне. Нужно понимать:

  • почему запрос стал медленным;
  • какие меры помогают быстро уменьшить проблему;
  • какие решения исправляют ситуацию надолго;
  • как менять структуру данных без остановки работы системы.

Эта лабораторная как раз про это. Она учит не "администрировать PostgreSQL", а разбираться в том, как устроена производительность на уровне модели данных, индексов, запросов и безопасных изменений.

За 4 часа вы научитесь

Понимать, почему запрос тормозит

Разберёте план выполнения запроса и научитесь видеть:

  • где база данных читает слишком много строк;
  • где условия применяются слишком поздно;
  • почему на маленьком объёме всё работало, а на большом стало медленно.

Работать с уже неудачно спроектированной таблицей

На практике увидите, как можно улучшать существующую таблицу:

  • добавлять индексы под реальные запросы;
  • ускорять поиск по данным;
  • выносить важные поля из сложной структуры в отдельные колонки;
  • делать это аккуратно, без остановки записи.

Проектировать более правильную модель данных

Соберёте новую таблицу:

  • с понятными колонками;
  • с разделением данных по времени;
  • с индексами под конкретный рабочий запрос;
  • с более понятной и устойчивой логикой работы.

Переносить данные без остановки системы

Отработаете безопасный сценарий изменения структуры:

  • новые данные продолжают поступать;
  • старая и новая структура какое-то время живут параллельно;
  • старые данные переносятся по частям;
  • потом чтение переключается на новую таблицу.

Понимать ограничения боевой системы

Увидите:

  • как возникают блокировки;
  • почему некоторые изменения опасно делать "в лоб";
  • почему большие изменения лучше выполнять поэтапно.

Что такое PostgreSQL Advanced в рамках этой лабораторной

Это не обзор "всех возможностей PostgreSQL".

Это практическая лабораторная по одному очень важному инженерному сценарию:

  • есть большая таблица;
  • в неё постоянно пишут данные;
  • есть медленный рабочий запрос;
  • нужно его ускорить;
  • при этом нельзя просто выключить систему и спокойно всё переделать.

Поэтому фокус здесь не на запоминании синтаксиса, а на инженерном мышлении:

  • какие поля должны быть отдельными колонками;
  • какие индексы нужны именно под рабочие запросы;
  • как разделять данные по времени;
  • как безопасно перейти от плохой модели к хорошей.

Для кого

Лабораторная рассчитана на тех, кто участвует в проектировании и обсуждении слоя данных. Особенно полезно тем, кто:

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

Нужно:

  • понимать SQL на базовом уровне;
  • понимать, что такое таблица, индекс, фильтр и транзакция на базовом уровне.

Практика за 4 часа

Блок 1. Контекст и короткая теория

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

Блок 2. Создание плохой модели и загрузка истории

  • Создание исходной таблицы orders_raw.
  • Загрузка большого исторического объёма данных.
  • Обновление статистики.
  • Обсуждение, почему такая модель неудобна для работы на больших объёмах.

Блок 3. Живая нагрузка и первый замер

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

Блок 4. Быстрые улучшения на существующей таблице

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

Блок 5. Лечение плохой таблицы по шагам

  • Добавление новых колонок city, channel, country.
  • Автоматическое заполнение новых колонок для свежих записей.
  • Перенос старых данных в новые колонки небольшими порциями.
  • Аккуратная проверка, что новые данные заполнены правильно.

Блок 6. Проектирование правильной новой таблицы

  • Создание новой таблицы orders_v2.
  • Разделение данных по времени.
  • Создание индексов под реальный рабочий запрос.
  • Обсуждение, чем новая модель лучше старой с точки зрения скорости и поддержки.

Блок 7. Перенос на новую модель без остановки записи

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

Блок 8. Финал: быстрый запрос, блокировки, выводы

  • Финальный запуск главного запроса на новой таблице.
  • Демонстрация блокировок.
  • Разбор, почему итоговый результат получился быстрее.
  • Общая логика: быстрые улучшения плюс правильное перепроектирование и безопасный перенос данных.

Вы уйдёте с результатами

Компетенции, которые вы прокачаете

  • Умение понимать причину медленных запросов.
  • Понимание, какой индекс нужен под конкретный запрос.
  • Понимание, когда таблицу нужно не просто "подлечить", а перепроектировать.
  • Умение проводить поэтапные изменения без остановки записи.
  • Навык обсуждать производительность не на уровне ощущений, а на уровне фактов.

Чем эта лабораторная отличается

Это не просто лабораторная "про SQL"

Главная ценность в том, что здесь соединены сразу три слоя:

  • проектирование таблиц;
  • ускорение запросов;
  • безопасное изменение структуры под живой нагрузкой.

Здесь есть сразу два полезных сценария

Участники видят:

  • как стоило бы спроектировать таблицу с самого начала;
  • и как исправлять таблицу, которая уже давно работает в реальной системе.

Здесь есть имитация реальной нагрузки

Параллельные процессы продолжают писать в таблицу, пока вы:

  • создаёте индексы;
  • переносите старые данные;
  • включаете параллельную запись в новую таблицу;
  • проверяете итоговую модель.

За счёт этого лабораторная ощущается как реальная инженерная задача, а не как учебный пример "в вакууме".

Предпосылки и формат

Формат проведения

  • Практическая лабораторная работа.
  • Формат с демонстрацией и самостоятельными шагами.
  • Общая продолжительность: 4 часа.

Что важно по инфраструктуре

  • PostgreSQL 16 или 17.
  • Клиент psql.

Дальнейший маршрут развития

После этой лабораторной логично продолжать в соседние темы:

  • мониторинг PostgreSQL;
  • потоковая передача изменений из базы данных;
  • аналитические витрины и отчётные слои;
  • архитектурные требования для систем с большим объёмом данных.

Стоимость и регистрация

📅 Ближайшая дата: 2026-07-12, 10:00-14:00 МСК · все мероприятия



💬 Обсуждение статьи

✈️ ✍️ Обсудить