System Design Space
Граф знанийНастройки

Обновлено: 4 мая 2026 г. в 19:42

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

сложный

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

В реальной работе она помогает связать xmin/xmax, снимки состояния, буферный кэш, типы индексов и восстановление после сбоя с корректностью конкурентных операций и ценой эксплуатации.

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

Практическая польза главы

Видимость версий строк

Понимание xmin/xmax и снимков состояния помогает корректно проектировать конкурентные бизнес-операции.

Журнал предзаписи и контрольные точки

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

Планировщик и индексная стратегия

Связывайте статистику, планировщик и типы индексов с критичными запросами до роста нагрузки.

Анализ первопричин

Показывайте умение диагностировать проблемы PostgreSQL на уровне внутренних механизмов, а не только на уровне SQL.

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

Postgres Pro

Бесплатная электронная версия книги Егора Рогова о внутренних механизмах PostgreSQL.

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

PostgreSQL 17 изнутри

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

Разбор книги Егора Рогова о внутренних механизмах PostgreSQL: многоверсионности, журнале предзаписи, буферном кэше, блокировках, планировщике и индексах.

Оригинал

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

Для практического проектирования особенно важны , , и понимание того, где PostgreSQL платит вводом-выводом, памятью и временем восстановления.

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

Понимание внутреннего устройства PostgreSQL критически важно для:

  • Производительности запросов — знание того, как работает планировщик запросов, помогает писать эффективный SQL
  • Диагностики проблем — понимание многоверсионности и блокировок позволяет находить причины конфликтов между транзакциями
  • Архитектурных обсуждений — глубокое знание реальной СУБД помогает объяснять компромиссы хранения, индексов и восстановления
  • Выбора индексов и партиционирования — внутренние механизмы показывают, почему один и тот же SQL может вести себя по-разному на разных данных

Связанная глава

Database Internals

Книга Алекса Петрова о B-деревьях, LSM-деревьях и общих принципах устройства СУБД.

Читать обзор

Структура книги: 5 частей

Часть 1: Изоляция и многоверсионность

Фундамент PostgreSQL — механизм многоверсионного управления конкурентным доступом (MVCC), благодаря которому обычные чтения и записи реже блокируют друг друга.

Ключевые концепции

  • Уровни изоляции транзакций
  • Структура страниц и версий строк
  • Снимки состояния
  • Правила видимости версий

Очистка данных

  • Обновление строки без изменения индексов (HOT)
  • Очистка VACUUM и автоматическая очистка
  • Заморозка идентификаторов транзакций
  • Перестроение таблиц и индексов

MVCC: Многоверсионность в PostgreSQL

1 / 4

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

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

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

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

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

Часть 2: Буферный кеш и журнал

Как PostgreSQL управляет памятью и обеспечивает долговечность данных через журнал предзаписи (WAL).

Общий буферный кэш

  • Организация общего буферного кэша
  • Алгоритм вытеснения по «часовой стрелке»
  • Закрепление буфера и счётчики ссылок
  • Локальные буферы для временных таблиц

Журнал предзаписи (WAL)

  • Структура записей журнала
  • Контрольные точки и восстановление
  • Синхронизация на диск через fsync
  • Архивация журнала и репликация

Часть 3: Блокировки

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

Блокировки объектов

  • 8 режимов блокировок таблиц
  • Матрица совместимости
  • Рекомендательные блокировки

Блокировки строк

  • FOR UPDATE / FOR SHARE
  • Блокировки версий строк
  • Multixact для разделяемых блокировок

Блокировки в памяти

  • Спин-блокировки
  • Легковесные блокировки (LWLocks)
  • Закрепление буферов

Часть 4: Выполнение запросов

От разбора SQL до возврата результата — основные этапы обработки запроса в PostgreSQL.

Стадии обработки

  • Разбор, переписывание и планирование
  • Сбор и использование статистики
  • Модель оценки стоимости планировщика
  • EXPLAIN ANALYZE в деталях

Операции выполнения

  • Последовательное, индексное и bitmap-сканирование
  • Соединения Nested Loop, Hash и Merge
  • Сортировка в памяти и на диске
  • Агрегация и группировка

Часть 5: Типы индексов

PostgreSQL поддерживает множество типов индексов для разных сценариев использования.

Классические

  • B-дерево — универсальный, по умолчанию
  • Hash — только равенство

Специализированные

  • GiST — геометрия, полнотекст
  • SP-GiST — разреженные данные
  • GIN — массивы, JSONB, FTS

Для аналитики

  • BRIN — Block Range Index
  • Подходит для временных рядов
  • Минимальный размер индекса

Ключевые выводы для системного дизайна

🔄Многоверсионность и изоляция

  • Каждая транзакция видит свой «снимок» данных
  • Старые версии строк хранятся в той же таблице
  • VACUUM удаляет «мёртвые» версии
  • Компромисс: высокая конкурентность ценой разрастания таблиц и индексов

📝Журнал предзаписи и долговечность

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

🎯Выбор индекса

  • B-дерево: диапазоны, сортировка, уникальность
  • GIN: полнотекстовый поиск, JSONB, массивы
  • GiST: геоданные, R-tree для координат
  • BRIN: огромные таблицы, куда данные в основном добавляются (логи, метрики)

Оптимизация запросов

  • Планировщик выбирает путь на основе статистики
  • ANALYZE обновляет статистику таблиц
  • Сканирование только по индексу не обращается к heap-хранилищу
  • Параллельные запросы для больших таблиц

Связанная глава

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

Учебное пособие от Postgres Pro — основы реляционной модели, SQL и архитектура СУБД.

Читать обзор

PostgreSQL vs другие СУБД

АспектPostgreSQLMySQL (InnoDB)
MVCCВерсии в heap-хранилище, нужна очистка VACUUMЖурнал отката, автоматическая очистка
ИндексыB-дерево, Hash, GiST, GIN, BRIN, SP-GiSTB-tree, Full-text, Spatial
РепликацияПотоковая физическая, логическаяАсинхронная, полусинхронная, Group Replication
РасширяемостьРасширения, пользовательские типы, операторыПлагины, движки хранения

Об авторе

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

Связанные главы

Вердикт

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

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

Чтобы отмечать прохождение, включи трекинг в Настройки