00-000350

Tantor: Настройка производительности PostgreSQL 16

В курсе изучаются: настройка операционной системы Linux,  настройка экземпляра, обслуживающего кластер баз данных, оптимизация структур хранения данных PostgreSQL.

Рассматривается:
 • Создание и использование тестов производительности, программ тестирования;
 • Использование основных ресурсов: памяти, процессоров, дискового и сетевого ввода-вывода;
 • Настройка операционной системы Linux для оптимальной работы СУБД PostgreSQL;
 • Структуры хранения данных;
 • Особенности использования индексов типа btree;
 • Настройка работы автовакуума;
 • Использование накопительной статистики

Предварительная подготовка
 • Знания курсов по теме ""Администрирование PostgreSQL""
 • Опыт администрирования СУБД PostgreSQL в операционных системах семейства Linux

60 000₽

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

5 дней (40ч в неделю)

Доступ к курсу

Навсегда в личном кабинете

Документы

Удостоверение о повышении квалификации

Кому подойдет этот курс

    Администраторы
    Разработчики
    Инженеры технической поддержки, в задачи которых входит настройка производительности СУБД семейства PostgreSQL

Получаемые знания

  • Знания, полученные при прохождении курса, позволяют настраивать работу экземпляра СУБД PostgreSQL для достижения высокой производительности.

Программа курса

23 модуля
Обзор
О компании Тантор
СУБД Tantor
Тантор xData
Тантор PipelineDB
Платформа Тантор
О курсе
Общие понятия настройки производительности
Методология настройки производительности
Последовательность действий по настройке производительности
Пример исключения задержки на стороне сервера приложений


Использование утилиты pgbench
Бенчмаркинг
Результат бенчмаркинга
pgbench - утилита бенчмаркинга PostgreSQL
Три встроенных теста pgbench
Параметры запуска pgbench
Рекомендации по использованию pgbench
Пример использования pgbench
Использование утилит sysbench и fio sysbench - утилита для тестирования производительности


Использование sysbench для тестирования процессоров памяти дисков
Тестирование аппаратных ресурсов
Тестирование ввода-вывода утилитой Flexible IO Tester (fio)


Тесты TPC
Тесты TPC
Тесты TPC-B и TPC-C
Тест TPC-E тестирование устойчивости к сетевым сбоям
Реализация теста TPC-C
Приложение HammerDB
Параметры для теста тип-С HammerDB
Утилита Go-TPC
Практика


Память
Оперативная память
Виртуальная адресация памяти
Размер страниц памяти
Размер буфера ассоциативной трансляции (TLB)
Огромные страницы (Huge Pages)
Использование Huge Pages
Использование экземпляром Huge Pages
Прозрачные огромные страницы (Transparent Huge Pages)
Неравномерный доступ к памяти (NUMA)


Нехватка памяти
Out Of Memory (OOM)
Размер резидентного набора (RSS)
Параметр oom_score_adj
Параметр vm.overcommit_memory
Установка значений overcommit и swap
Параметр vm.swappiness
Дедупликация страниц памяти (KSM)
Выделение локальной памяти процессами экземпляра
ОШИБКА: invalid memory alloc request size
Параметр enable_large_allocations


Страничный кэш
Страничный кэш linux
Доля изменённых ("грязных") страниц в кэше
Фрагментация памяти
Дефрагментация памяти
Длительность удержания грязных страниц в кэше
Параметр backend_flush_after
Практика


Процессоры
Simultaneous Multi-Threading (SMT) и Hyper-Threading (HT)
Привязка процесса к процессору (CPU affinity)
Просмотр списка процессов утилитой ps
Запись и просмотр метрик утилитой atop
Переключения контекста выполнения
Планировщик операционной системы
Использование процессорного времени (пропорция USER/SYS)
Источник времени (clock source)
Сравнение источников времени
Сравнение источников времени в PostgreSQL
Замена источника времени


Сеть
Основные параметры сети
Алгоритмы Congestion и slow start
Алгоритм BBR (Bottleneck Bandwidth и Round Trip Time)
Параметры сетевых соединений
Параметры энергосбережения
Практика


Система хранения
Дисковая подсистема
HDD SSD NVMe
Блочные устройства
Планировщик ввода/вывода  (I/O Scheduler)
Изменение I/O Scheduler
Физический сектор диска
Взаимодействие процессов экземпляра с диском
Синхронизация файлов данных с диском
Размер блока файловой системы
Параметр wal_sync_method
Гарантия записи в WAL
Быстрые фиксации изменений в журнале файловой системы ext4 (fast_commit)
Включение быстрой фиксации (fast_commit)
Утилита pg_test_fsync
Групповая фиксация транзакций
Параметры commit_delay и commit_siblings
Команды шин ввода-вывода discard/trim
Поддержка discard/trim
Рекомендации по использованию SSD
Параметр max_files_per_process
Увеличение значения  max_files_per_process
Временная файловая система (tmpfs)
RAID
LVM
Практика


Начальная настройка СУБД
Конфигураторы
Параметры shared_buffers temp_buffers effective_cache_size
Параметры work_mem hash_mem_multiplier maintenance_work_mem
Параметр autovacuum_work_mem
Параметры temp_file_limit и temp_tablespaces
Параметры max_slot_wal_keep_size и transaction_timeout
Параметры max_connections и client_connection_check_interval
Параметр max_locks_per_transaction
Фоновые рабочие процессы
Параметры max_worker_processes и max_parallel_workers
Параметр max_parallel_workers_per_gather
Параметры системы хранения
Параметры контрольных точек
Параметры процесса фоновой записи bgwriter
Практика


Структуры хранения
Таблицы
Служебные столбцы
Расширение pageinspect
Padding и aligning
Aligning (выравнивание)
cache line
Структура блока данных
Число строк в блоке
Порядок следования столбцов в таблице
Порядок следования столбцов и производительность
Практика


Индексы
Методы доступа к строкам
Класс операторов для индекса
Семейства и классы операторов
Поддерживающие функции для индекса
Индексы для ограничений целостности
Индекс типа btree
Функции расширения pageinspect для btree
Индексы с дедупликацией в листовых блоках
Проверка поддерживается ли дедупликация
Параметры создания индекса и их влияние на производительность
Частичные (partial) индексы
Эволюция индексов: создание удаление перестройка
Структура индекса типа btree
High key в структуре индекса
Изменение структуры индекса при добавлении строк
Пример роста индекса при вставке строк
Структура индекса после его перестроения
FILLFACTOR в индексах типа btree
Быстрый путь (fastpath) вставки в индексы
Внутристраничная очистка в индексах
Влияние удаления строк на индексы
Исключение блоков из структуры индекса
Число исключённых блоков из структуры индекса
Практика
TOAST
TOAST (The Oversized-Attribute Storage Technique)
Поля переменной длинны
Вытеснение полей в TOAST
Алгоритм вытеснения полей в TOAST
TOAST chunk
Ограничения TOAST
Выравнивание строк с вытесненными в TOAST полями
Параметры toast_tuple_target и default_toast_compression
Оптимизация Heap Only Tuple
Мониторинг HOT update
Влияние FILLFACTOR на HOT cleanup
Внутристраничная очистка в таблицах
Внутристраничная очистка в индексах


Типы данных
Типы данных наименьшего размера: boolean char smallint
Типы данных переменной длинны
Целочисленные типы данных
Выбор типов данных для первичного ключа
Параметр cache у последовательностей
Хранение дат, времени, их интервалов
Функции проверки типа данных и размера поля
Типы данных для вещественных чисел
Параметр конфигурации extra_float_digits
Хранение вещественных чисел
Разрядность результата деления numeric
Практика


Архитектура
Запуск экземпляра, процесс postgres
Процесс startup
Синхронизация PGDATA, параметр  recovery_init_sync_method
Синхронизация бэкапа, параметр  pg_basebackup --sync-method
Параметр  restart_after_crash
Особенности работы экземпляра в контейнере docker
Что происходит при запуске серверного процесса
Общая память процессов экземпляра
Кэш таблиц системного каталога
Представление pg_stat_slru
Локальная память процесса
Представление pg_backend_memory_contexts
Функция pg_log_backend_memory_contexts(PID)


Блокировки
Типы блокировок
Параметры deadlock_timeout и log_lock_waits
Параметр lock_timeout
Подтранзакции
Мультитранзакции
Быстрый путь блокирования (fastpath)
Сильные и слабые блокировки таблиц
Справочник устанавливаемых командами блокировок
Секции таблицы блокировок
Транши блокировок (tranches)
Легковесные блокировки
Блокирование по быстрому пути и 16 блокировок
Индексы соединения секции и быстрый путь
Параметр join_collapse_limit
Представление pg_locks
Параметр track_commit_timestamp
Практика


Буферный кэш
Структуры памяти обслуживающие буферный кэш
Структуры памяти обслуживающие буферный кэш (продолжение)
Поиск свободного буфера
Алгоритм вытеснения грязных буферов
Стратегии замены буферов
Поиск блока в буферном кэше
Закрепление буфера (pin) и блокировка content_lock
Освобождение буферов при удалении файлов
Оптимизированное расширение файлов
Изменение размера файлов и буферный кэш
Предварительное чтение блоков (prefetch)
Представление pg_stat_recovery_prefetch
Расширение pg_prewarm
Процесс фоновой записи bgwriter
Алгоритм очистки кэша буферов процессом bgwriter
Представление pg_stat_bgwriter
Расширение pg_buffercache
Настройка размера кэша буферов
Параметр synchronize_seqscans
Практика


Контрольная точка
Контрольная точка
Шаги выполнения контрольной точки
Шаги выполнения контрольной точки (продолжение)
Параметры конфигурации процесса checkpointer
Статистика для настройки параметров checkpointer
Пример настройки параметров checkpointer
Пример настройки параметров checkpointer (продолжение)
Практика


Автовакуум
Алгоритм вакуумирования
Первая фаза вакуумирования
Расчёт памяти под TID для вакуумирования
Вторая и третья фазы вакуумирования
Четвертая и пятая фазы вакуумирования
Агрессивный (Aggressive) режим вакуумирования
Заморозка строк (FREEZE)
Вакуум в 17 версии PostgreSQL
Сравнительное тестирование вакуума 16 и 17 версий PostgreSQL
Контрольные суммы и WAL
Параметры команды VACUUM
Параметры команды VACUUM (продолжение)
Расширение pg_vsibility
Мониторинг автовакуума
Представление pg_stat_progress_vacuum
Параметр log_autovacuum_min_duration
Параметры конфигурации автовакуума
Настройка автовакуума
Параметр autovacuum_naptime
Выбор таблиц автовакуумом
Рекомендации по настройке автовакуума
Важность наблюдения за горизонтом баз данных
Мониторинг горизонта баз данных
Параметры автовакуума на уровне таблиц
Параметр default_statistics_target
Раздувание (bloat) таблиц и индексов
Практика


Использование диагностического журнала
Диагностический журнал
Параметры диагностики
Отслеживание использования временных файлов
Отслеживание работы автовакуума и автоанализа
Наблюдение за контрольными точками
Описание записей log_checkpoints
Описание записей log_checkpoints (продолжение)
Утилита pg_waldump и записи log_checkpoints
Утилита pg_waldump и записи log_checkpoints
Диагностика частоты соединений
Диагностика блокирующих ситуаций
Практика


Накопительная статистика
Накопительная статистика
Утилита pg_test_timing
Просмотр статистики работы процессов
Представление pg_stat_database
Прогресс выполнения команд
Представление pg_stat_io
Статистики buffers_backend_fsync и fsyncs
Строки представления pg_stat_io
Характеристики pg_stat_io
Статистики представления pg_stat_io
Представления pg_statio_all_tables и pg_statio_all_indexes
Представление pg_stat_all_tables
Представление pg_stat_all_indexes
Длительность удержания горизонта баз данных
Представление pg_stat_wal
Расширение pg_walinspect
Использование расширения pg_walinspect
Представление pg_stat_activity
Блокирующие процессы и функция pg_blocking_pids()
pg_cancel_backend() и pg_terminate_backend()
Практика


Расширения pg_stat_statements и pg_stat_kcache
Расширение pg_stat_statements
Конфигурация pg_stat_statements
Параметры конфигурации pg_stat_statements
Представление pg_stat_statements
Запросы к представлению pg_stat_statements
Примеры запросов к представлению pg_stat_statements
Метрики pg_stat_statements
Примеры метрик представления pg_stat_statements
Расширение pg_stat_kcache
Статистики  собираемые pg_stat_kcache
Просмотр статистик pg_stat_kcache
Практика


Расширение pg_wait_sampling
Расширение pg_wait_sampling
История событий ожидания
История событий ожидания (продолжение)
Параметры расширения pg_wait_sampling
Профиль pg_wait_sampling
Запросы к профилю pg_wait_sampling
Запросы к профилю pg_wait_sampling (продолжение)
Сброс статистик
Практика


Как проходит обучение на платформе ФОРС

[ 01 ]

Знакомство с платформой

Платформа учебного центра ФОРС предназначена для удобного и комфортного обучения. Доступ к материалам будет открыт сразу после приобретения курса, а также навсегда доступен в личном кабинете.

[ 02 ]

Обучение

Каждый раздел содержит уроки с теоретическими материалами в видео и текстовых форматах, а так же демонстрацию практических примеров от преподавателей. Самостоятельная работа поможет закрепить полученные знания.

[ 03 ]

Обратная связь и поддержка

Мы поддерживаем онлайн-ресурс, где слушатели всегда могут задать вопрос преподавателю или коллективно обсудить возможные проблемы с другими студентами. Вы всегда сможете получить необходимую информацию в личном кабинете.

[ 04 ]

Дипломы и сертификаты

Все документы об окончании курсов собраны в одном месте в электронном формате — вы всегда можете посмотретьи скачать их в личном кабинете.

Остались вопросы?

Оставьте свои контактные данные — мы с вами свяжемся и все расскажем

Нажимая на кнопку «Отправить», я принимаю условия Политики конфиденциальности, и даю согласие на обработку персональных данных

WhatsApp
Telegram