Программа курса Tantor DBA1-18 "Администрирование PostgreSQL 18"


Продолжительность: 5 дней

Предварительная подготовка:

базовые навыки работы в операционных системах семейства Linux и базовые знания SQL

Какие навыки будут получены:

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

Учебные материалы

учебник

практические задания

демонстрации

виртуальная машина

Описание курса

Курс предназначен для администраторов PostgreSQL и всех, кто хочет познакомиться с архитектурой и задачами администрирования СУБД PostgreSQL 18 и более ранних версий, а также возможностями Tantor Postgres SE, SE 1C, BE, Free.

Содержание курса

Введение

Предварительная подготовка

Материалы курса

Разделы курса

О курсе

О компании Тантор Лабс

СУБД Tantor Postgres

Tantor XData

Tantor Polar

Платформа Tantor

Доработка расширений PostgreSQL

Конференции PGBootCamp

Установка

Предварительные требования

Проверка возможности установки

Инсталлятор

Локальная установка

Процесс установки

После установки

Установка дополнений

Конфигураторы

Создание кластера утилитой initdb

Провайдеры локализации

Выбор параметров локализации

Управление

Утилита управления экземпляром pg_ctl

Относительные пути и pg_ctl

Процесс postgres

Управление экземпляром через systemctl

systemctl и pg_ctl

Работа в контейнере docker

Три режима остановки экземпляра

Остановка экземпляра

Сообщения об остановке экземпляра

Утилиты управления (обёртки команд SQL)

Утилиты резервирования

Утилиты управления (другие)

Утилиты управления (продолжение)

Утилита psql

Терминальный клиент psql

Соединение с базой данных

Параметры соединения

Получение справки по командам psql

История команд и постраничный вывод

Форматирование вывода в psql

Вывод результата запроса в формате HTML

Приглашение к вводу команд (промпт) psql

Переменные окружения, на которые реагирует psql

Переменные psql \set

Выполнение команд в psql

Параметр ON_ERROR_ROLLBACK

Автоматическая фиксация транзакций

Выполнение командных файлов в psql

Переменные psql

Выполнение командных файлов в psql

Графические приложения: DBeaver

Графические приложения: Платформа Tantor

Демонстрация

Практика

Архитектура PostgreSQL

Экземпляр PostgreSQL

Процессы экземпляра PostgreSQL

Запуск экземпляра, процесс postgres

Запуск серверного процесса

Общая память процессов экземпляра

Кэш таблиц системного каталога

Представление pg_stat_slru

Локальная память процесса

Представление pg_backend_memory_contexts

Функция pg_log_backend_memory_contexts(PID)

Структуры памяти, обслуживающие буферный кэш

Структуры памяти, обслуживающие буферный кэш (продолжение)

Закрепление блока в буфере

Закрепление буфера (pin) и блокировка content_lock

Стратегии замены буферов (буферные кольца)

Поиск блока в буферном кэше

Освобождение буферов при удалении файлов

Процесс фоновой записи bgwriter

Очистка кэша буферов процессом bgwriter

Контрольная точка

Шаги выполнения контрольной точки

Шаги выполнения контрольной точки (продолжение)

Взаимодействие процессов экземпляра с диском

Практика

Многоверсионность

Версии строк

Таблицы

Служебные столбцы

Структура блока данных

Заголовок версии строки

Вставка строки

Обновление строки

Удаление строки

Типы данных наименьшего размера: boolean, "char", char, smallint

Типы данных переменной длины

Целочисленные типы данных

Хранение дат, времени, их интервалов

Типы данных для вещественных чисел

Моментальный снимок

Транзакция

Свойства транзакций

Уровни изоляции транзакций

Феномены изоляции транзакций

Пример ошибки сериализации

Статусы транзакций (CLOG)

Фиксация транзакции

Подтранзакции

Типы блокировок

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

Совместимость блокировок

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

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

Мультитранзакции

Очередь при блокировке строки

Практика

Регламентные работы

Автовакуум

Процессы автовакуума

Энергичная заморозка

Представление pg_stat_progress_vacuum

Параметры команды VACUUM

Параметры команды VACUUM (продолжение)

Параметр конфигурации default_statistics_target

Раздувание (bloat) таблиц и индексов

Внутристраничное обновление (HOT update)

Мониторинг HOT update

Внутристраничная очистка (HOT cleanup)

Внутристраничная очистка в таблицах

Внутристраничная очистка в индексах

Эволюция индексов: создание, удаление, перестройка

Частичные (partial) индексы

Команда REINDEX

REINDEX CONCURRENTLY

Гипотетические индексы (расширение HypoPG)

Библиотека plantuner

Счетчик транзакций

Практика

Выполнение запросов

SQL - декларативный язык

Синтаксический разбор

Семантический разбор

Трансформация (переписывание) запроса

Планирование выполнения (оптимизация)

Выполнение запроса

Команда EXPLAIN

Параметры команды EXPLAIN

Параметры команды EXPLAIN (продолжение)

Индексы для ограничений целостности

Способы доступа к данным в плане запроса

Методы доступа к строкам

Способы соединения наборов строк

Кардинальность и селективность

Стоимость плана запроса

Статистики

Таблица pg_statistic

Накопительная статистика

Расширение pg_stat_statements

Параметры расширения pg_stat_statements

Практика

Расширения PostgreSQL

Расширяемость PostgreSQL

Директории файлов расширений и библиотек

Установка расширений

Файлы расширений

Foreign Data Wrapper

Расширение postgres_fdw

Расширение file_fdw

Расширение dblink

Практика

Конфигурирование PostgreSQL

Обзор

Параметры конфигурации

Просмотр параметров

Просмотр параметров (продолжение)

Представления для просмотра параметров

Основной файл параметров postgresql.conf

Файл параметров postgresql.auto.conf

Применение изменений параметров конфигурации

Привилегии на изменение параметров конфигурации

Классификация параметров: Контекст

Параметры контекста internal

Классификация параметров: Уровни

Классификация параметров: Уровни (продолжение)

Параметры хранения на уровне таблиц и индексов

Классификация параметров: Категории

Категория: "Для разработчиков"

Категория: "Пользовательские настройки"

Названия и значения параметров конфигурации

Параметр конфигурации transaction_timeout

Автономные транзакции

Параметр конфигурации transaction_buffers

Параметры multixact_members_buffers и multixact_offsets_buffers

Параметр конфигурации subtransaction_buffers

Параметр конфигурации notify_buffers

Задание параметров при создании кластера

Разрешения на директорию PGDATA

Размер блока данных PostgreSQL

Ограничения PostgreSQL

Параметр enable_large_allocations

Ограничения на длину идентификаторов

Конфигурационные параметры

Демонстрация

Практика

Логическая структура кластера

Кластер баз данных

Экземпляр

База данных

Список баз данных

Создание базы данных

Изменение свойств базы данных

Команда ALTER DATABASE

Удаление базы данных

Схемы в базе данных

Создание и изменение схем

Путь поиска объектов в схемах

Специальные схемы

Определение текущего пути поиска

В какой схеме будет создан объект

Путь поиска в подпрограммах SECURITY DEFINER

Маскировка объектов схем

Системный каталог

Общие объекты кластера

Использование системного каталога

Обращение к системному каталогу

reg-типы

Часто используемые команды psql

Событийные триггеры

Демонстрация

Практика

Физическая структура кластера

Директория файлов кластера PGDATA

Директория и файлы в PGDATA

Файлы журнала предварительной записи (WAL)

Директория с файлами журнала

Табличные пространства

Табличные пространства: характеристики

Табличные пространства: характеристики (продолжение)

Команды управления табличными пространствами

Изменение директории табличного пространства

Параметры табличных пространств

Временные файлы

Параметры конфигурации для временных файлов

Основной слой хранения данных

Дополнительные слои

Расположение файлов объектов

Размеры табличных пространств и баз данных

Функции определения размера

Перемещение объектов

Смена схемы и владельца

Реорганизация и перемещение таблиц утилитой pg_repack

Уменьшение размера файлов таблиц утилитой pgcompacttable

TOAST (The Oversized-Attribute Storage Technique)

TOAST (The Oversized-Attribute Storage Technique)

Поля переменной длины

Поля переменной длины (продолжение)

Вытеснение полей в TOAST

Алгоритм вытеснения полей в TOAST

TOAST chunk

Ограничения TOAST

Колоночное хранение: общая информация

Колоночное хранение: особенности использования

Колоночное хранение: параметры

Демонстрация

Практика

Диагностический журнал

Диагностический журнал

Уровни важности сообщений

Расположение журнала

Передача сообщений syslog

Ротация файлов диагностического журнала

Диагностический журнал

Параметры диагностики

Отслеживание использования временных файлов

Отслеживание работы автовакуума и автоанализа

Наблюдение за контрольными точками

Описание записей log_checkpoints

Описание записей log_checkpoints (продолжение)

Утилита pg_waldump и записи log_checkpoints

Утилита pg_waldump и записи log_checkpoints (продолжение)

Логирование соединений

Параметр log_connections

Параметр log_disconnections

Диагностика частоты соединений с базой данных

Диагностика блокирующих ситуаций

Практика

Безопасность

Пользователи (роли) в кластере баз данных

Пользователи (роли)

Атрибуты (параметры, свойства) пользователей

Параметр конфигурации createrole_self_grant

Выданные пользователям привилегии

Атрибут INHERIT и GRANT WITH INHERIT

Переключение сессии в другую роль и смена ролей

Предопределённые (служебные) роли

Права на объекты

Просмотр прав на объекты в psql

Привилегии по умолчанию (DEFAULT PRIVILEGES)

Защита на уровне строк (Row-level security, RLS)

Подсоединение к экземпляру

Файл pg_hba.conf

Содержимое pg_hba.conf

Содержимое pg_hba.conf (продолжение)

Файл сопоставления имён pg_ident.conf

Практика

Физическое резервирование

Виды резервных копий

Холодные бэкапы

Что нужно резервировать

Ограничения при создании бэкапа

Архив журналов

Процедура восстановления

Процедура восстановления (продолжение)

Пример восстановления

Применение журнальных записей (WAL)

Линии времени

Файлы журнала предварительной записи (WAL)

LSN (Log Sequence Number)

Названия журнальных файлов и LSN

Функции для работы с журналами

Отсутствие потерь (Durability)

Утилита pg_receivewal

Zero data loss (RPO=0)

Запуск pg_receivewal как службы

Слот репликации

Утилита резервирования pg_basebackup

Создание резервной копии

Создание резервной копии (продолжение)

Параметр конфигурации full_page_writes

Инкрементальные бэкапы

Пример инкрементального резервирования

Утилита pg_verifybackup

Утилита резервирования wal-g

Демонстрация

Практика

Логическое резервирование

Логическое резервирование

Примеры использования

Сравнение логического и физического резервирования

Команда COPY .. TO

Команда COPY .. FROM

Команда psql \copy

Утилита pg_dump

Параллельная выгрузка

Утилита pg_restore

Возможности pg_restore

Утилита pg_dumpall

Возможности pg_dumpall

Строки большого размера

Параметр enable_large_allocations

Демонстрация

Практика

Физическая репликация

Физическая репликация

Мастер и реплики

Реплики и архив журнала

Настройка мастера

Создание реплики

Слоты репликации

Параметры конфигурации на репликах

Конфликты на реплике

Аномалия long fork

Горячая реплика

Обратная связь с мастером

Мониторинг горизонта

Мониторинг горизонта (продолжение)

Параметры max_slot_wal_keep_size и transaction_timeout

Параметры мастера, которые должны быть синхронизированы с репликами

Смена ролей мастер-реплика

Повышение реплики до мастера

Файлы истории линий времени

Утилита pg_rewind

Утилита pg_rewind (продолжение)

Процессы экземпляра реплики

Отложенная репликация

Проблема с перезапуском walreceiver

Задержка при резервировании реплики

Восстановление повреждённых блоков с реплики

Демонстрация

Практика

Логическая репликация

Логическая репликация

Применение логической репликации

Физическая и логическая репликация

Идентификация строк

Способы идентификации строк

Действия для создания логической репликации

Создание публикации

Создание подписки

Свойства подписки

Свойства подписки (продолжение)

Утилита pg_createsubscriber

Нагрузка на экземпляр

Получение журнальных данных с реплики

Конфликты

Мониторинг логической репликации

Двунаправленная репликация

Демонстрация

Практика

Обзор Платформы Tantor

Инструменты мониторинга

Платформа Tantor

Возможности Платформы Tantor

Работа с экземплярами PostgreSQL: Обзор

Список кластеров Patroni и их экземпляров

Работа с экземплярами: Конфигурация

Работа с экземплярами:  Браузер БД -> Аудит

Браузер БД -> SQL-редактор и Схема

Работа с экземплярами: Профилировщик запросов

Профилировщик запросов -> Планы

Экземпляр: Профилировщик запросов: рекомендации

Репликация и Табличные пространства

Работа с экземплярами: Задачи

Модули Платформы Tantor

Анонимайзер

Оповещения

Интеграция со службами сообщений

Курс по Платформе Tantor

Возможности Tantor Postgres

Tantor Postgres - ветвь PostgreSQL

Доработки в Tantor Postgres

Дополнительные параметры 17.6, 17.9, 18.3

PostgreSQL 18: автовакуум

PostgreSQL 18: репликация

PostgreSQL 18: сообщения

PostgreSQL 18: файлы

Потоковый и асинхронный ввод-вывод

Tantor Postgres 18: сжатие данных

Tantor Postgres 18: ILM

Tantor Postgres 18: auto_dump

Tantor Postgres 17: дополнительные параметры

Tantor Postgres 17: расширения

Параметры оптимизатора запросов 17.6 - 18.3

Параметры оптимизатора запросов 17.5

Параметры для временных таблиц

Функции для работы с uuid версии 7

Tantor Postgres 18: расширение pg_sample_profile

Расширение pg_wait_sampling

История событий ожидания

Расширение pg_stat_kcache

Статистики, собираемые pg_stat_kcache

Расширение pg_store_plans

Tantor Postgres 17: расширение pg_tde

Tantor Postgres 17: валидатор oauth_base_validator

Параметр enable_large_allocations

Алгоритм сжатия pglz

Параметр libpq_compression

Параметр wal_sender_stop_when_crc_failed

Параметр backtrace_on_internal_error

Расширение uuid_v7

Расширение pg_tde (Transparent Data Encryption)

Валидатор oauth_base_validator

Tantor Postgres 17: библиотека credcheck

Расширение pg_variables

Производительность при использовании pg_variables

Преимущества расширения pg_variables

Расширения pgaudit и pgaudittofile

Конфигурирование расширений pgaudit и pgaudittofile

Расширение pg_background

Tantor Postgres 16: библиотека pg_stat_advisor

Расширения fasttrun и online_analyze

Расширение mchar

Расширение fulleq

Расширение orafce

Расширение http

Алгоритм сжатия pglz

Параметр libpq_compression

Параметр wal_sender_stop_when_crc_failed

Параметр backtrace_on_internal_error

Утилита pg_configurator

Утилита pg_anon

Tantor Postgres 17: утилита pg_diag_setup.py

Tantor Postgres 17: утилита pg_sec_check

Tantor Postgres 16: утилита pgcopydb

Утилита WAL-G (Write-Ahead Log Guard)

Tantor Postgres: Расширение PipelineDB

Другие расширения

Практика

Отличия от предыдущей версии курса

Курс является обновленной версией курса DBA1-17 "Tantor: Администрирование PostgreSQL 17". Курс полезен для тех, кто планирует использовать не только Tantor Postgres, но и ванильный PostgreSQL. Обзор библиотек и расширений Tantor Postgres перенесён в заключительную главу курса.