System Design Space

    Глава 113

    Обновлено: 9 февраля 2026 г. в 20:31

    PostgreSQL изнутри (short summary)

    Прогресс части0/12

    Официальный источник

    Postgres Pro

    Бесплатная электронная версия книги на сайте Postgres Professional.

    Скачать бесплатно

    PostgreSQL 17 изнутри

    Авторы: Егор Рогов
    Издательство: ДМК Пресс, 2025
    Объём: 668 страниц

    Разбор книги Егора Рогова: MVCC, буферный кеш, WAL, блокировки, планировщик запросов и типы индексов PostgreSQL.

    PostgreSQL 17 изнутри — оригинальная обложкаОригинал

    Зачем читать эту книгу?

    Понимание внутреннего устройства 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

    1 / 4

    Начальное состояние

    Строка создана транзакцией 100. xmin=100 означает, что строка видна всем транзакциям с ID ≥ 100.

    Heap (хранилище таблицы)

    id: 1Alice
    xmin:100
    xmax:
    xmin— ID транзакции, создавшей версию
    xmax— ID транзакции, удалившей/обновившей версию

    Транзакции (выберите для проверки видимости)

    Часть 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 другие СУБД

    АспектPostgreSQLMySQL (InnoDB)
    MVCCВерсии в heap, требует VACUUMUndo log, автоматическая очистка
    ИндексыB-tree, Hash, GiST, GIN, BRIN, SP-GiSTB-tree, Full-text, Spatial
    РепликацияStreaming (physical), LogicalAsync, Semi-sync, Group Replication
    РасширяемостьExtensions, custom types, operatorsPlugins, storage engines

    Об авторе

    Егор Рогов — эксперт по PostgreSQL, работающий в компании Postgres Professional. Автор курсов по администрированию и разработке на PostgreSQL, активный участник PostgreSQL-сообщества. Книга основана на многолетнем опыте обучения и консультирования.

    Где найти книгу

    Вердикт

    «PostgreSQL изнутри» — это must-read для всех, кто серьёзно работает с PostgreSQL. Книга бесплатна, написана на русском языке и даёт глубокое понимание механизмов, которые обычно остаются «чёрным ящиком». Особенно ценна для тех, кто готовится к System Design интервью и хочет демонстрировать не поверхностные знания, а понимание реальных trade-offs в проектировании систем хранения данных.