0.1 Что это за книга и чем она не является
Это учебник о внутреннем устройстве, а не справочник администратора и не самоучитель по SQL. Граница важна, чтобы ты понимал, чего ждать.
Чего здесь нет:
- базового SQL - предполагается, что
SELECT,JOINиpsqlтебе знакомы; - пересказа документации по каждому параметру конфигурации;
- рецептов «сделай раз-два-три» без объяснения, почему именно так.
Что здесь есть: модель того, как движок хранит данные, видит их сквозь транзакции, чистит мусор, ищет строки и строит планы запросов. Когда такая модель есть в голове, рецепты ты выведешь сам, а чужие - поймёшь и проверишь.
0.2 Девиз: предскажи, потом проверь
Главный приём книги - предсказание. Перед тем как запустить команду, ты пишешь, что ожидаешь увидеть. Это превращает чтение из пассивного в активное: модель в голове получает проверку фактом.
Работает это потому, что ошибка предсказания точечно показывает, где
твоя модель расходится с реальностью. Прочитать «страница состоит из
четырёх зон» и кивнуть - легко. Предсказать смещение lower в
заголовке конкретной страницы, а потом увидеть другое число - вот тут
и начинается понимание.
Поэтому не пропускай шаги «предскажи». Соблазн сразу запустить и посмотреть велик, но половина пользы - именно в паузе перед запуском.
0.3 Для кого эта книга
Книга рассчитана на три волны читателей, и каждая берёт из неё своё.
| Уровень | Кто ты | Что унесёшь |
|---|---|---|
| Начальный | бэкенд-разработчик, знаешь SQL | модель «как база хранит и видит данные», читаешь EXPLAIN |
| Средний | разработчик БД, начинающий DBA | устройство MVCC и vacuum, проектирование индексов, диагностика планов |
| Продвинутый | DBA, SRE, инженер по производительности | внутренности индексов, статистика планировщика, журнал и репликация |
Материал идёт по нарастающей. Часть глав и врезок помечена как продвинутые - на первом проходе их можно пропустить и вернуться, когда основа уляжется.
0.4 Как устроена глава
Главы построены по одной схеме, перенятой у хороших инженерных книг:
- Сценарий или вопрос - зачем вообще об этом думать.
- Наивная модель - как это работало бы «в лоб».
- Что ломается - где наивная модель не сходится.
- Реальная модель - как сделано на самом деле и почему.
- Проверка - смотрим механизм живым инструментом.
Внутри встречаются врезки двух видов. «Копнуть глубже» - необязательная деталь для любопытных. «Подводный камень» - место, где легко обжечься на практике. Заканчивается глава кратким итогом, контрольными вопросами и лабой, где всё потрогаешь руками.
0.5 Сэндбокс и инструменты-линзы
Все лабы запускаются в одноразовом контейнере с PostgreSQL прямо в браузере: поднимается чистая база, ты работаешь, по окончании контейнер уничтожается. Ничего ставить на свою машину не нужно, сломать ничего важного нельзя.
Чтобы заглядывать внутрь, мы пользуемся расширениями-линзами. Главное -
pageinspect: оно декодирует сырые страницы и показывает то, что
обычно скрыто. Рядом - pg_buffercache, pgstattuple, pg_visibility
и системные представления pg_stat_*. Через них механизмы из этой
книги перестают быть теорией: их видно.
Демо-база у нас сквозная - маленькая схема «Авиаперевозки» с таблицами
flights, bookings и tickets. Она достаточно мала, чтобы держать
её в голове, и достаточно настоящая, чтобы на ней были видны страницы,
версии строк, индексы и планы.
Резюме
- Книга про внутреннее устройство PostgreSQL, а не про администрирование или базовый SQL.
- Девиз - покажи на странице: каждый механизм наблюдаем системным инструментом.
- Главный приём - предсказать вывод команды до запуска, потом сверить.
- Материал рассчитан на три волны: начальный, средний и продвинутый уровни.
- Лабы идут в одноразовом браузерном контейнере с линзами pageinspect и pg_stat_*.