О книге....18
Глава 1. Введение....24
Организация данных....24
Базы данных....24
Системный каталог....25
Схемы....26
Табличные пространства....27
Отношения....28
Слои и файлы....29
Страницы....34
TOAST....34
Процессы и память....40
Клиенты и клиент-серверный протокол....42
Часть I. Изоляция и многоверсионность....46
Глава 2. Изоляция....48
Согласованность....48
Уровни изоляции и аномалии в стандарте SQL....50
Потерянное обновление....51
Грязное чтение и Read Uncommitted....51
Неповторяющееся чтение и Read Committed....52
Фантомное чтение и Repeatable Read....52
Отсутствие аномалий и Serializable....53
Почему именно эти аномалии?....53
Уровни изоляции в PostgreSQL....55
Read Committed....56
Repeatable Read....64
Serializable....71
Какой уровень изоляции использовать?....74
Глава 3. Страницы и версии строк....76
Структура страниц....76
Заголовок страницы....76
Специальная область....77
Версии строк....77
Указатели на версии строк....78
Свободное место....79
Структура версий строк....79
Выполнение операций над версиями строк....81
Вставка....82
Фиксация....86
Удаление....88
Отмена....89
Обновление....89
Индексы....90
TOAST....91
Виртуальные транзакции....92
Вложенные транзакции....93
Точки сохранения....93
Ошибки и атомарность операций....95
Глава 4. Снимки данных....98
Что такое снимок данных....98
Видимость версий строк в снимке....99
Из чего состоит снимок....100
Видимость собственных изменений....105
Горизонт транзакции....106
Снимок данных для системного каталога....109
Экспорт снимка данных....110
Глава 5. Внутристраничная очистка и hot-обновления....112
Внутристраничная очистка....112
Hot-обновления....116
Внутристраничная очистка при hot-обновлениях....120
Разрыв hot-цепочки....121
Внутристраничная очистка индексов....123
Глава 6. Очистка и автоочистка....125
Очистка вручную....125
Еще раз о горизонте базы данных....128
Этапы выполнения очистки....131
Сканирование таблицы....131
Очистка индексов....131
Очистка таблицы....133
Усечение таблицы....133
Анализ....134
Автоматическая очистка и анализ....134
Устройство автоочистки....135
Какие таблицы требуют очистки....136
Какие таблицы требуют анализа....138
Автоочистка в действии....139
Регулирование нагрузки....143
Управление интенсивностью обычной очистки....144
Управление интенсивностью автоочистки....144
Мониторинг очистки....145
Отслеживание выполнения ручной очистки....146
Отслеживание выполнения автоочистки....148
Глава 7. Заморозка....150
Переполнение счетчика транзакций....150
Заморозка версий и правила видимости....151
Управление заморозкой....154
Минимальный возраст для заморозки....155
Возраст для агрессивной заморозки....157
Возраст для аварийного срабатывания автоочистки....159
Возраст для приоритетного режима заморозки....161
Заморозка вручную....161
Очистка с заморозкой....162
Заморозка при загрузке....162
Глава 8. Перестроение таблиц и индексов....164
Полная очистка....164
Необходимость....164
Оценка плотности информации....165
Заморозка....169
Другие способы перестроения....170
Аналоги полной очистки....170
Перестроение без долгих блокировок....171
Профилактика....172
Читающие запросы....172
Обновление данных....173
Часть II. Буферный кеш и журнал....176
Глава 9. Буферный кеш....178
Кеширование....178
Устройство буферного кеша....179
Попадание в кеш....181
Промах кеша....186
Поиск буфера и вытеснение....187
Массовое вытеснение....189
Настройка размера....192
Прогрев кеша....195
Локальный кеш....197
Глава 10. Журнал предзаписи....199
Журналирование....199
Устройство журнала....201
Логическая структура....201
Физическая структура....204
Контрольная точка....206
Восстановление....211
Фоновая запись....214
Настройка....215
Настройка контрольной точки....215
Настройка фоновой записи....218
Мониторинг....218
Глава 11. Режимы журнала....221
Производительность....221
Надежность....225
Кеширование....226
Повреждение данных....227
Неатомарность записи....229
Уровни журнала....233
Minimal....234
Replica....236
Logical....238
Часть III. Блокировки....240
Глава 12. Блокировки отношений....242
Общие сведения о блокировках....242
Тяжелые блокировки....245
Блокировки номеров транзакций....247
Блокировки отношений....248
Очередь ожидания....251
Глава 13. Блокировки строк....255
Устройство....255
Режимы блокировки строки....256
Исключительные режимы....256
Разделяемые режимы....258
Мультитранзакции....259
Очередь ожидания....261
Исключительные режимы....261
Разделяемые режимы....268
Блокировка без ожидания....271
Взаимоблокировки....273
Взаимоблокировка при обновлении строк....275
Взаимоблокировка двух команд UPDATE....276
Глава 14. Блокировки разных объектов....280
Блокировки неотношений....280
Блокировки расширения отношения....282
Блокировки страниц....283
Рекомендательные блокировки....283
Предикатные блокировки....285
Глава 15. Блокировки в памяти....292
Спин-блокировки....292
Легкие блокировки....293
Примеры....293
Буферный кеш....293
Буферы журнала предзаписи....295
Мониторинг ожиданий....296
Семплирование....298
Часть IV. Выполнение запросов....302
Глава 16. Этапы выполнения запросов....304
Демонстрационная база данных....304
Протокол простых запросов....307
Разбор....307
Трансформация....309
Планирование....311
Исполнение....320
Протокол расширенных запросов....322
Подготовка....322
Привязка параметров....323
Планирование и исполнение....324
Получение результатов....327
Глава 17. Статистика....328
Базовая статистика....328
Неопределенные значения....332
Уникальные значения....333
Наиболее частые значения....335
Гистограмма....338
Статистика для нескалярных типов данных....342
Средний размер поля....343
Корреляция....343
Статистика по выражению....344
Расширенная статистика по выражению....345
Статистика для индекса по выражению....346
Многовариантная статистика....347
Функциональные зависимости между столбцами....347
Многовариантное число различных значений....349
Многовариантные списки частых значений....351
Глава 18. Табличные методы доступа....353
Подключаемые движки хранения....353
Последовательное сканирование....355
Оценка стоимости....356
Параллельные планы выполнения....360
Параллельное последовательное сканирование....361
Оценка стоимости....362
Ограничения параллельного выполнения....366
Количество рабочих процессов....366
Нераспараллеливаемые запросы....370
Ограниченно распараллеливаемые запросы....371
Глава 19. Индексные методы доступа....376
Индексы и расширяемость....376
Классы и семейства операторов....379
Класс операторов....379
Семейство операторов....384
Интерфейс механизма индексирования....386
Свойства метода доступа....387
Свойства индекса....391
Свойства столбцов....392
Глава 20. Индексное сканирование....396
Простое индексное сканирование....396
Оценка стоимости....397
Хороший случай: высокая корреляция....398
Плохой случай: низкая корреляция....401
Сканирование только индекса....404
Include-индексы....407
Сканирование по битовой карте....409
Точность карты....410
Действия с битовыми картами....412
Оценка стоимости....413
Параллельные версии индексного сканирования....417
Сравнение методов доступа....419
Глава 21. Вложенный цикл....421
Виды и способы соединений....421
Соединение вложенным циклом....423
Декартово произведение....423
Параметризованное соединение....427
Кеширование (мемоизация) строк....431
Внешние соединения....435
Анти- и полусоединения....437
Неэквисоединения....439
Параллельный режим....440
Глава 22. Хеширование....442
Соединение хешированием....442
Однопроходное соединение хешированием....442
Двухпроходное соединение хешированием....448
Динамические корректировки плана....451
Соединение хешированием в параллельных планах....455
Параллельное однопроходное хеш-соединение....456
Параллельное двухпроходное хеш-соединение....458
Модификации....461
Группировка и уникальные значения....464
Глава 23. Сортировка и слияние....467
Соединение слиянием....467
Слияние отсортированных наборов....467
Параллельный режим....471
Модификации....472
Сортировка....473
Быстрая сортировка....475
Частичная пирамидальная сортировка....476
Внешняя сортировка....478
Инкрементальная сортировка....482
Параллельный режим....484
Группировка и уникальные значения....486
Сравнение способов соединения....489
Часть V. Типы индексов....494
Глава 24. Хеш-индекс....496
Общий принцип....496
Страничная организация....497
Класс операторов....504
Свойства....505
Свойства метода доступа....505
Свойства индекса....506
Свойства столбцов....507
Глава 25. B-дерево....508
Общий принцип....508
Поиск и вставка....509
Поиск по равенству....509
Поиск по неравенству....511
Поиск по диапазону....512
Вставка....512
Страничная организация....514
Компактное хранение дубликатов....518
Компактное хранение внутренних индексных записей....520
Класс операторов....521
Семантика сравнения....521
Сортировка и составные индексы....527
Свойства....532
Свойства метода доступа....532
Свойства индекса....533
Свойства столбцов....533
Глава 26. Индекс GiST....535
Общий принцип....535
R-дерево для точек....537
Страничная организация....540
Класс операторов....541
Поиск вхождения в область....543
Поиск ближайших соседей....545
Вставка....550
Ограничение исключения....551
Свойства....554
RD-дерево для полнотекстового поиска....557
Про полнотекстовый поиск....557
Индексация tsvector....558
Свойства....566
Другие типы данных....566
Глава 27. Индекс SP-GiST....569
Общий принцип....569
Дерево квадрантов для точек....571
Класс операторов....572
Страничная организация....576
Поиск....577
Вставка....578
Свойства....581
K-мерные деревья для точек....583
Префиксное дерево для строк....585
Класс операторов....586
Поиск....587
Вставка....588
Свойства....590
Другие типы данных....591
Глава 28. Индекс GIN....593
Общий принцип....593
Индекс для полнотекстового поиска....594
Страничная организация....596
Класс операторов....598
Поиск....600
Частые и редкие лексемы....601
Вставка....605
Ограничение выборки....607
Свойства....608
Ограничения GIN и RUM-индекс....610
Индекс для триграмм....611
Индекс для массивов....613
Индекс для JSON....617
Класс операторов jsonb_ops....617
Класс операторов jsonb_path_ops....620
Другие типы данных....622
Глава 29. Индекс BRIN....623
Общий принцип....623
Пример....624
Страничная организация....626
Поиск....628
Обновление сводной информации....629
Вставка значений....629
Обобщение зоны....630
Диапазоны значений (minmax)....631
Выбор столбцов для индексирования....632
Размер зоны и эффективность поиска....633
Свойства....637
Мультидиапазоны значений (minmax-multi)....640
Охватывающие значения (inclusion)....643
Фильтры Блума (bloom)....646
Заключение....651
Предметный указатель....652
Перед вами обновленное издание бестселлера "PostgreSQL изнутри".
Рассматривается внутреннее устройство СУБД PostgreSQL: детали реализации многоверсионности и изоляции на основе снимков данных, включая процедуру очистки неактуальных версий строк; буферный кеш и журнал предзаписи; использование блокировок различных уровней; планирование и выполнение SQL-запросов; принципы расширяемости и особенности имеющихся индексных методов доступа. Большое внимание уделяется возможностям, предоставляемым для самостоятельного изучения механизмов функционирования PostgreSQL.В новом издании учтены замечания читателей и исправлены опечатки, а также внесены изменения, произошедшие в версии PostgreSQL 15.
Книга предназначена администраторам и программистам, а также будет полезна всем разработчикам, которых не устраиват работа с базой данных как с "черным ящиком".