Официальный источник
Postgres Pro
Бесплатная электронная версия книги на сайте Postgres Professional.
PostgreSQL 17 изнутри
Авторы: Егор Рогов
Издательство: ДМК Пресс, 2025
Объём: 668 страниц
Разбор книги Егора Рогова: MVCC, буферный кеш, WAL, блокировки, планировщик запросов и типы индексов PostgreSQL.
ОригиналЗачем читать эту книгу?
Понимание внутреннего устройства PostgreSQL критически важно для:
- Оптимизации производительности — знание того, как работает планировщик запросов, помогает писать эффективный SQL
- Troubleshooting — понимание MVCC и блокировок позволяет диагностировать проблемы конкурентности
- System Design интервью — глубокое знание реальной СУБД выделяет кандидата среди тех, кто знает только теорию
- Архитектурных решений — выбор правильного типа индекса или стратегии партиционирования
Связанная глава
Database Internals
Книга Alex Petrov о B-Trees, LSM-Trees и общих принципах устройства СУБД.
Структура книги: 5 частей
Часть 1: Изоляция и многоверсионность
Фундамент PostgreSQL — механизм MVCC (Multi-Version Concurrency Control), позволяющий читателям и писателям не блокировать друг друга.
Ключевые концепции
- Уровни изоляции транзакций
- Структура страниц и версий строк (tuples)
- Снимки данных (snapshots)
- Видимость версий (visibility rules)
Очистка данных
- HOT updates (Heap-Only Tuples)
- Процессы Vacuum и Autovacuum
- Заморозка транзакций (freezing)
- Перестроение таблиц и индексов
MVCC: Многоверсионность в PostgreSQL
Начальное состояние
Строка создана транзакцией 100. xmin=100 означает, что строка видна всем транзакциям с ID ≥ 100.
Heap (хранилище таблицы)
Транзакции (выберите для проверки видимости)
Часть 2: Буферный кеш и журнал
Как PostgreSQL управляет памятью и обеспечивает durability через Write-Ahead Logging (WAL).
Буферный кеш
- Shared buffers и их организация
- Алгоритм вытеснения страниц (clock sweep)
- Buffer pinning и reference counting
- Local buffers для временных таблиц
WAL (журнал предзаписи)
- Структура WAL-записей
- Checkpoint и recovery
- Режимы синхронизации (fsync)
- Архивация и репликация
Часть 3: Блокировки
Несмотря на MVCC, PostgreSQL использует различные типы блокировок для обеспечения консистентности.
Блокировки объектов
- 8 режимов блокировок таблиц
- Матрица совместимости
- Advisory locks
Блокировки строк
- FOR UPDATE / FOR SHARE
- Tuple-level locks
- Multixact для shared locks
Блокировки в памяти
- Spinlocks
- Lightweight locks (LWLocks)
- Buffer pins
Часть 4: Выполнение запросов
От парсинга SQL до возврата результата — полный цикл обработки запроса.
Стадии обработки
- Parsing → Rewriting → Planning
- Сбор и использование статистики
- Стоимостная модель (cost model)
- EXPLAIN ANALYZE в деталях
Операции выполнения
- Seq Scan vs Index Scan vs Bitmap Scan
- Nested Loop / Hash / Merge Join
- Сортировка: quicksort vs external sort
- Агрегация и группировка
Часть 5: Типы индексов
PostgreSQL поддерживает множество типов индексов для разных сценариев использования.
Классические
- B-tree — универсальный, по умолчанию
- Hash — только равенство
Специализированные
- GiST — геометрия, полнотекст
- SP-GiST — разреженные данные
- GIN — массивы, JSONB, FTS
Для аналитики
- BRIN — Block Range Index
- Идеален для time-series данных
- Минимальный размер индекса
Ключевые концепции для System Design
🔄MVCC и изоляция
- Каждая транзакция видит свой «снимок» данных
- Старые версии строк хранятся в той же таблице
- VACUUM удаляет «мёртвые» версии
- Trade-off: высокая конкурентность vs накопление bloat
📝WAL и durability
- Изменения сначала пишутся в журнал, потом в данные
- При сбое — восстановление из WAL (crash recovery)
- Основа для репликации (streaming replication)
- Checkpoint балансирует между recovery time и I/O
🎯Выбор индекса
- B-tree: диапазоны, сортировка, уникальность
- GIN: полнотекстовый поиск, JSONB, массивы
- GiST: геоданные, R-tree для координат
- BRIN: огромные append-only таблицы (логи, метрики)
⚡Оптимизация запросов
- Планировщик выбирает путь на основе статистики
- ANALYZE обновляет статистику таблиц
- Index-only scan избегает обращения к heap
- Параллельные запросы для больших таблиц
Связанная глава
Путеводитель по базам данных
Учебное пособие от Postgres Pro — основы реляционной модели, SQL и архитектура СУБД.
PostgreSQL vs другие СУБД
| Аспект | PostgreSQL | MySQL (InnoDB) |
|---|---|---|
| MVCC | Версии в heap, требует VACUUM | Undo log, автоматическая очистка |
| Индексы | B-tree, Hash, GiST, GIN, BRIN, SP-GiST | B-tree, Full-text, Spatial |
| Репликация | Streaming (physical), Logical | Async, Semi-sync, Group Replication |
| Расширяемость | Extensions, custom types, operators | Plugins, storage engines |
Об авторе
Егор Рогов — эксперт по PostgreSQL, работающий в компании Postgres Professional. Автор курсов по администрированию и разработке на PostgreSQL, активный участник PostgreSQL-сообщества. Книга основана на многолетнем опыте обучения и консультирования.
Где найти книгу
Вердикт
«PostgreSQL изнутри» — это must-read для всех, кто серьёзно работает с PostgreSQL. Книга бесплатна, написана на русском языке и даёт глубокое понимание механизмов, которые обычно остаются «чёрным ящиком». Особенно ценна для тех, кто готовится к System Design интервью и хочет демонстрировать не поверхностные знания, а понимание реальных trade-offs в проектировании систем хранения данных.
