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

Обновлено: 24 июня 2026 г. в 18:12

PostgreSQL изнутри (краткое содержание)

сложный

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

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

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

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

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

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

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

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

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

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

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

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

Рамка выбора и редакторский фокус

Фокус главы

многоверсионности, журнале предзаписи, планировщике и индексах PostgreSQL

Профиль нагрузки

Читайте через механизм: путь записи, путь чтения, изоляция, восстановление, репликация, консенсус и поведение под конкуренцией.

Когда выбирать

Углубление в детали полезно, когда нужно объяснить не только выбор СУБД, но и физическую причину её задержки, надёжности или ограничений.

Граница и риск

Не превращайте главу в пересказ книги: важен мост от внутреннего устройства к системному дизайну и эксплуатационным решениям.

Связать дальше

Связывайте выводы с overview конкретных движков, DDIA, репликацией/шардингом и диагностикой производительности.

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

Postgres Pro

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

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

PostgreSQL 17 изнутри

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

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

Оригинал

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

Дальше начинается то, за что платят в продакшене: , , — то есть места, где PostgreSQL расплачивается вводом-выводом, памятью и временем восстановления. Не зная этих счетов, легко спроектировать таблицу, которая через полгода начнёт тормозить под собственным мусором.

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

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

  • Производительность запросов — пока вы не знаете, как планировщик читает статистику, ускорение запроса остаётся угадыванием, а не работой по плану
  • Диагностика проблем — многоверсионность и блокировки объясняют, откуда берутся зависшие транзакции и взаимоблокировки, которые иначе выглядят как случайность
  • Архитектурные обсуждения — на реальной СУБД компромиссы хранения, индексов и восстановления перестают быть лозунгами и получают цену в вводе-выводе и времени
  • Выбор индексов и партиционирования — один и тот же 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 до возврата строк. На каждой стадии планировщик может ошибиться в оценке, и тогда вместо индексного доступа вы получаете полный перебор таблицы.

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

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

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

  • Последовательное, индексное и bitmap-сканирование
  • Соединения вложенным циклом, хешированием и слиянием
  • Сортировка в памяти и на диске
  • Агрегация и группировка

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

Здесь нет «лучшего» индекса: каждый тип выигрывает на своей форме данных и запросов, а на чужой добавляет накладные расходы на запись без выигрыша на чтении.

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

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

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

  • 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-дерево, хеш-индекс, GiST, GIN, BRIN, SP-GiSTB-tree, Full-text, Spatial
РепликацияПотоковая физическая, логическаяАсинхронная и полусинхронная репликация, Group Replication
РасширяемостьРасширения, пользовательские типы, операторыПлагины, движки хранения

Об авторе

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

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

Вердикт

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

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

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