Программа курса Tantor DBA1-18 "Администрирование PostgreSQL 18"
базовые навыки работы в операционных системах семейства 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 перенесён в заключительную главу курса.