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

Издание основано на учебном курсе «QPT. Оптимизация запросов», разработанного компанией Postgres Professional, и сохранило его главное достоинство — возможность сложить цельную картину того, как работает планировщик, и на серьёзном уровне разобраться в его механизмах. Компактный форм-фактор издания удобно читать в метро или на ходу, когда нет возможности открыть ноутбук и немедленно проверить теорию на практике.
Для кого эта книга?
«PostgreSQL 16. Оптимизация запросов» предназначена для специалистов, которые уже работают с PostgreSQL и хотят перестать воспринимать планировщик как чёрный ящик. Книга будет особенно полезна:
-
разработчикам приложений, которые замечают «тормозящие» запросы и хотят понять, почему PostgreSQL выбирает именно такой план выполнения и как его улучшить;
-
администраторам баз данных, которым нужно грамотно настраивать конфигурационные параметры на основе понимания механизмов, а не методом проб и ошибок.
Что внутри?
Книга последовательно проводит читателя от фундамента — устройства планировщика — к прикладным техникам оптимизации. Все примеры построены на учебной базе данных «Авиаперевозки», а значит, есть общий контекст на протяжении всего текста.
Книга разделена на девять глав:
-
Глава I. Демонстрационная база данных. Знакомство с учебной базой данных «Авиаперевозки»: схема таблиц, связи между ними, особенности данных. Формируется фундамент для всех последующих примеров.
-
Глава II. Планирование и выполнение. Разбор полного цикла обработки SQL-запроса: от синтаксического анализа и переписывания до планирования и исполнения. Отдельно рассматриваются кеширование планов (generic vs. custom), подготовленные операторы (PREPARE/EXECUTE) и роль статистики при принятии решений планировщиком.
-
Глава III. Методы доступа. Детальный разбор всех видов сканирования: последовательное (Seq Scan), индексное (Index Scan), по битовой карте (Bitmap Scan) и покрывающее (Index-Only Scan). Отдельная секция посвящена INCLUDE-индексам и условиям их эффективного применения.
-
Глава IV. Сортировка и группировка. Разбор механизмов упорядочивания и агрегации данных. Автор объясняет разницу между сортировкой в памяти (quicksort) и внешней сортировкой на диске (external merge), а также представляет эффективную инкрементальную сортировку. В части группировки сравниваются стратегии HashAggregate и GroupAggregate, рассматривается работа оконных функций.
-
Глава V. Способы соединения. Три алгоритма JOIN в PostgreSQL: вложенные циклы (Nested Loop), хеш-соединение (Hash Join) и слияние (Merge Join). Разбирается, когда планировщик выбирает каждый из них и как на этот выбор влияет work_mem.
-
Глава VI. Статистика. Глава о том, как планировщик «видит» данные. Рассматриваются базовые показатели (MCV, гистограммы, доля NULL) и инструменты исправления ошибок планировщика с привлечением расширенной статистики (функциональных зависимостей и многовариантных списков). Также объясняется механизм выбора между общими (generic) и частными (custom) планами для подготовленных операторов.
-
Глава VII. Профилирование. Практическое руководство по поиску узких мест. Автор рассказывает, что именно нужно измерять (время отклика vs ввод-вывод), как использовать расширение pg_stat_statements для получения профиля всей базы и как анализировать выполнение отдельных запросов через EXPLAIN ANALYZE. Отдельно показано профилирование кода на PL/pgSQL.
-
Глава VIII. Материализация и функции. Анализ того, как PostgreSQL работает с промежуточными результатами. Рассматривается узел Materialize, особенности материализации CTE (обобщенных табличных выражений) и использование временных таблиц. Важная часть главы посвящена категориям изменчивости функций (VOLATILE, STABLE, IMMUTABLE) и их критическому влиянию на возможность оптимизации запроса.
-
Глава IX. Подходы к настройке. Итоговая глава, объединяющая теорию в стратегию оптимизации. Рассматривается настройка сервера (параметры памяти, стоимости ресурсов, настройки параллелизма), влияние схемы данных и ограничений целостности на планы запросов. Завершается книга практическими примерами оптимизации «коротких» (OLTP) и «длинных» (OLAP) запросов путём переписывания условий и работы со статистикой.
Сильные стороны книги
Главное достоинство книги — исключительно плотная связь теории с практикой. Каждый метод доступа, каждый алгоритм соединения сопровождаются реальными выводами EXPLAIN ANALYZE с разбором каждой строки плана: что означает Buffers: shared hit/read, чем отличается lossy bitmap от exact, почему Heap Fetches равен нулю и когда это хорошо.
Книга не ограничивается описанием «как работает» — она методично учит «как диагностировать». Автор демонстрирует типичные ловушки: устаревшую статистику, неправильно оценённую селективность, неучтённые зависимости между столбцами, и показывает инструменты для их обнаружения и устранения.
Компактный формат — сознательный выбор. Книга не претендует на роль энциклопедии, но предлагает чёткую систему координат: после её прочтения читатель понимает, какие вопросы задавать при анализе медленного запроса и в каком порядке искать ответы.
Как получить книгу?
«PostgreSQL 16. Оптимизация запросов» свободно доступна на официальном сайте Postgres Professional. Там же можно найти сопутствующие материалы и демонстрационную базу данных «Авиаперевозки» для самостоятельной практики:
Автор: slonik_pg


