Postgres Pro Enterprise 13
Отчеты по нагрузке pgpro_pwr
13
Авторские права
© Postgres Professional, 2023 год.
Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Обзор pgpro_pwr
Архитектура pgpro_pwr
Установка pgpro_pwr
Выборки
Политика хранения
Выборочные линии
Размеры отношений
Отчеты
3
Обзор pgpro_pwr
Расширение для выявления ресурсоемких операций в БД
поиск запросов, потребляющих много ресурсов
определение характера и интенсивности нагрузки
анализ исторической информации о нагрузке
сравнение профилей нагрузки
помощь в расследовании инцидентов
Расширение pgpro_pwr предназначено для выявления наиболее
ресурсоемких операций в базе данных. PWR произносится как «пауэр»
(power) — это сокращение от Postgres Pro Workload Reporting.
Расширение основано на pg_profile — расширении с открытым
исходным кодом для PostgreSQL:
Предназначение:
поиск запросов, потребляющих больше всего ресурсов СУБД;
получение информации о типе и интенсивности нагрузки;
исследование нагрузки на «горячие» объекты;
сохранение и анализ нагрузки в историческом разрезе;
сравнение профилей нагрузки, имевших место в разное время;
облегчение расследования инцидентов;
проведение анализа нагрузочного тестирования.
Основная идея расширения — сохранение снимков собранных данных
для последующего анализа.
Документация:
4
Архитектура pgpro_pwr
Статистика собирается с целевых серверов расширениями
pgpro_stats или pg_stat_statements
Выборки-снимки помещаются в репозиторий истории
По выборкам создаются отчеты об изменениях
pgpro_stats / pg_stat_statements
pg_wait_sampling
репозиторий истории
Отчет
Отчет
снимки
Исходные данные собираются с целевых серверов с помощью
представлений сборщика статистики и расширения pgpro_stats или
pg_stat_statements. Рекомендуется использовать расширение
pgpro_stats, так как оно выдает планы операторов, информацию о
событиях ожидания и нагрузке по отдельным базам данных, ролям,
клиентам и приложениям. Сводная статистика ожиданий поступает от
расширения pg_wait_sampling. Если нет возможности использовать
pgpro_stats, можно использовать pg_stat_kcache как источник
информации об использовании ресурсов процессора
и о нагрузке на файловую систему (rusage).
Работа модуля pgpro_pwr заключается в обработке накапливаемых
статистических выборок. Выборка содержит статистику о наиболее
активных объектах и запросах, собранную с момента получения
предыдущей выборки. По выборкам строят отчеты.
Расширение pgpro_pwr состоит из следующих частей:
репозиторий истории — хранилище собранных данных;
механизм управления выборками — предоставляет функции для
получения выборок и поддержки репозитория в актуальном
состоянии посредством удаления устаревших данных;
механизм отчетов — представляет функции построения отчетов
по данным из репозитория;
административные функции для создания серверов, линий выборок
и для управления ими.
5
Установка pgpro_pwr
Пакет pgpro_pwr устанавливается средствами ОС
Упрощенная установка
pgpro_pwr непосредственно на целевом сервере,
отслеживание нагрузки от имени суперпользователя
Развернутая установка
нагрузка отслеживается на одном или нескольких удаленных серверах
от имени специально зарегистрированного пользователя
Предполагается, что уже установлено расширение pgpro_stats или
pg_stat_statements и настроен сборщик статистики Postgres Pro.
Само расширение pgpro_pwr собрано в отдельный установочный пакет
и по умолчанию не устанавливается.
Упрощенная установка предназначена для случаев, когда pgpro_pwr
устанавливается непосредственно на целевой сервер и будет
отслеживать его нагрузку от имени суперпользователя. Она сводится
к созданию отдельной схемы для объектов расширения и установке
расширения. Так как pgpro_pwr зависит от расширения dblink, то либо
в команду CREATE EXTENSION добавляют ключевое слово CASCADE,
либо устанавливают dblink заранее.
Развернутая установка должна выполняться, когда планируется
использовать pgpro_pwr для отслеживания нагрузки на одном или
нескольких серверах с соблюдением принципа наименьших
привилегий.
Описание вариантов установки в документации:
7
Выборки
Данные собираются с зарегистрированных серверов
Выборка содержит данные с момента предыдущей выборки
изменения
take_sample()
take_sample_subset()
Расширение pgpro_pwr собирает данные с зарегистрированных
серверов. По умолчанию создается активное определение сервера
с именем local, соответствующее текущему кластеру.
Данные с активных серверов собираются функцией take_sample;
неактивный сервер можно указывать явно. Если имеется несколько
серверов, можно получить выборки с их подмножества функцией
take_sample_subset.
Выборка содержит информацию об изменениях в измеряемых
параметрах СУБД, происшедших с момента предыдущей выборки.
Аккумулируемые регулярные выборки позволяют строить отчеты
о нагрузке базы данных за предыдущее время. Обычно достаточно
получать одну-две выборки в час.
При формировании выборки предыдущая статистика сбрасывается
функцией pgpro_stats_statements_reset или pg_stat_statements_reset
в зависимости от того, какое расширение поставляет данные.
8
Политика хранения
Настройка
pgpro_pwr.max_sample_age = 7 срок хранения в днях, глобально
set_server_max_sample_age() для конкретного сервера
окно удержания
новая выборка
Для выборок можно определять политики хранения:
глобально с помощью параметра конфигурации
pgpro_pwr. max_sample_age;
для конкретного сервера с помощью вызова функции
set_server_max_sample_age.
9
Выборочные линии
Именованная последовательность выборок
можно использовать для построения отчета
можно задать срок хранения (имеет приоритет над политикой)
create_baseline()
Для построения отчета по нагрузке требуется две выборки; они задают
период, за который были собраны данные для отчета.
Другой способ задания периода для отчета — использование
выборочной линии. Выборочные линии — удобный инструмент для
работы с выборками. При создании выборочной линии задают ее имя
и либо указывают начальную и конечную выборки, либо задают их
с помощью диапазона времени.
Период хранения выборки задается в днях и определяется либо
глобально, либо на уровне сервера. Если необходимо переопределить
политику хранения для каких-либо выборок, следует использовать
выборочные линии.
Для каждой выборочной линии можно задавать время хранения в днях.
Если для линии время хранения не задано, то относящиеся к ней
выборки вообще не будут удаляться.
Для управления выборочными линиями предназначены функции:
create_baseline — создает выборочную линию;
drop_baseline — удаляет выборочную линию;
keep_baseline — задает срок хранения;
show_baselines — выдает информацию об имеющихся выборочных
линиях.
11
Размеры отношений
Политика анализа размеров
разрешенное окно в течение суток для сбора данных о размерах
минимальный промежуток между выборками, содержащими размеры
set_server_size_sampling()
AccessExclusiveLock
02:00 02:0014:0008:00
20:00
Сбор сведений о размерах всех отношений в базе данных занимает
продолжительное время, при этом на каждое анализируемое
отношение устанавливается исключительная блокировка
AccessExclusiveLock.
Однако чаще всего достаточно собирать информацию о размерах один
раз в сутки, для этого можно определить политику анализа размеров
для серверов. Политика устанавливает:
окно в течение суток, когда разрешается сбор сведений о размерах
отношений;
минимальный промежуток между двумя выборками со сведениями
о размерах.
Политику можно задать с помощью функции set_server_size_sampling.
Просмотреть политики для серверов можно, вызвав функцию
show_servers_size_sampling.
12
Отчеты
Отчеты pgpro_pwr формируются в формате HTML
get_report() — обычные отчеты, предоставляющие статистику
по нагрузке для заданного интервала
get_diffreport() — разностные отчеты со статистикой
по одинаковым объектам в двух сравниваемых интервалах
Выбранный элемент отчета автоматически выделяется
в других разделах отчета
Настройка
pgpro_pwr.max = 7 число первых по некоторому критерию
объектов, выбираемых для каждой
таблицы отчета
Функции построения отчетов позволяют определить интервалы
разными способами, принимая идентификаторы выборок, выборочные
линии или диапазоны времени. В последнем случае выбирается
минимальный интервал, охватывающий указанный диапазон.
Почти любой элемент в отчете можно выделить одним щелчком мыши.
Выбранный элемент сразу будет выделен во всех разделах отчета, что
облегчит его поиск.
Разделы отчета подробно описаны в документации:
14
Итоги
Расширение pgpro_pwr предназначено для выявления
ресурсоемких операций в БД
Статистика собирается расширениями pgpro_stats или
pg_stat_statements
Поддерживается политика хранения выборок
Можно получать обычные и разностные отчеты в HTML
15
Практика
1. Подготовьте СУБД для работы с расширением pgpro_pwr.
2. Создайте базу данных и установите расширение pgpro_pwr.
3. Проведите нагрузочное тестирование с помощью pgbench,
получив две выборки — до и после тестирования.
4. Создайте новое табличное пространство и сделайте выборку.
5. Снова проведите тестирование с помощью pgbench так,
чтобы индексы были в новом табличном пространстве, после
чего сделайте еще одну выборку.
6. Получите разностный отчет для первого и второго тестов.
1. Подключите разделяемые библиотеки pg_wait_sampling и pgpro_stats.
2. В базе данных создайте схему для объектов расширения pgpro_pwr.
3. Выполните обычную инициализацию таблиц pgbench и обычный тест
нагрузки, например, на 60 секунд.
4. Предварительно создайте каталог для табличного пространства,
например, в домашнем каталоге пользователя postgres.
5. Заново проведите инициализацию таблиц pgbench, указав для
табличного пространства ключ --index-tablespace. Сделайте новую
выборку.
6. Получите разностный отчет с двумя промежутками.