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


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

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

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

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

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

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

учебник

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

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

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

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

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

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

Введение

О курсе

Установка

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

Инсталлятор

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

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

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

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

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

Управление

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

Процесс postgres

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

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

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

Утилиты управления

Утилита psql

psql: подключение к базе данных

psql: параметры подключения

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

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

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

Вывод результата в расширенном формате

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

Автофиксация транзакций и выполнение команд psql

Переменные psql

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

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

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

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

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

Практика

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

Экземпляр PostgreSQL

Запуск экземпляра

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

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

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

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

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

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

Функция pg_log_backend_memory_contexts(PID)

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

Поиск свободного буфера

Алгоритм вытеснения грязных буферов

Стратегии замены буферов

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

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

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

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

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

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

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

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

Практика

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

Таблицы

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

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

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

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

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

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

Типы данных наименьшего размера

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

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

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

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

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

Транзакция

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Практика

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

Автовакуум

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

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

Параметр default_statistics_target

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

Оптимизация Heap Only Tuple

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

Влияние FILLFACTOR на HOT cleanup

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

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

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

Частичные индексы

Команда REINDEX

REINDEX CONCURRENTLY

Расширение HypoPG

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

Практика

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

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

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

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

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

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

Команда EXPLAIN

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

Таблицы

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

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

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

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

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

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

Статистики

Таблица pg_statistic

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

Расширение pg_stat_statements

Практика

Расширения PostgreSQL

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

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

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

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

Foreign Data Wrapper

Расширение file_fdw

Расширение dblink

Практика

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

Обзор

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

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

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

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

Применение изменений параметров

Привилегии на изменение параметров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметр enable_large_allocations

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

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

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

Практика

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

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

Экземпляр

База данных

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

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

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

Команда ALTER DATABASE

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

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

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

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

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

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

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

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

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

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

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

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

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

reg-типы

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

Инспектор баз данных в Платформе Tantor

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

Практика

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

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

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

Временные объекты

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

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

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

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

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

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

Работа с файлами журнала

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

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

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

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

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

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

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

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

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

TOAST (The Oversized-Attribute Storage Technique)

TOAST (The Oversized-Attribute Storage Technique)

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

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

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

TOAST chunk

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

Параметры toast_tuple_target и default_toast_compression

Колоночное хранение Hydra pg_columnar

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

Практика

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметр log_connections

Параметр log_disconnections

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

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

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

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

Практика

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

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

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

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

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

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

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

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

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

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

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

Файл pg_hba.conf

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

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

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

Практика

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

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

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

Что резервируется

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

Файлы журнала предзаписи

LSN (Log Sequence Number)

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

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

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

Холодное резервирование

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

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

Утилита pg_verifybackup

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

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

Утилита pg_receivewal

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

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

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

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

Практика

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

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

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

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

Команда COPY .. TO

Команда COPY .. FROM

Команда \copy

Утилита pg_dump

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

Утилита pg_restore

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

Утилита pg_dumpall

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

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

Параметр enable_large_allocations

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

Практика

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Утилита pg_rewind

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

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

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

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

Практика

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

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

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

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

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

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

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

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

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

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

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

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

Конфликты

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

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

Практика

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

Сценарии использования

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

Платформа Tantor

Настройки пользователей

Рабочие пространства

Обзор экземпляра

Кластера Patroni

Профилировщик запросов

Репликация

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

Оповещения

Конфигурация мониторинга

Аналитика

Активности фоновых процессов

Настройки

Анализ схемы данных

Регламентное обслуживание

Планировщик задач

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

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

Tantor Postgres - ветвь PostgreSQL

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

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

Расширения Tantor Postgres SE и SE 1C

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

Библиотека pg_stat_advisor

Параметры enable_temp_memory_catalog и enable_delayed_temp_file

Параметр 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

Библиотека credcheck

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

Расширение mchar

Расширение fulleq

Расширение orafce

Расширение http

Расширение pg_store_plans

Расширение pg_variables

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

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

Расширение pg_stat_kcache

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

Расширение pg_wait_sampling

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

Расширение pg_background

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

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

Утилита pgcopydb

Утилита pg_anon

Утилита pg_configurator

Утилита pg_diag_setup.py

Утилита pg_sec_check

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

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

Практика

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

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