🧪 Лаборатория Лабораторная работа «PostgreSQL Advanced для системного аналитика и архитектора»¶
Инструменты: 🐘 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 МСК · все мероприятия
💬 Обсуждение статьи
✈️ ✍️ Обсудить