3.6. Сбор и постобработка данных экземпляров #
3.6.1. Сбор данных экземпляра #
Сбор данных экземпляров агентами состоит из следующих этапов:
Подключение к базе данных экземпляра по умолчанию.
Сбор глобальных объектов:
роли
табличные пространства
базы данных
Сбор локальных объектов для каждой базы данных:
расширения
схемы
таблицы
индексы
последовательности
функции
языки
Отправка собранных объектов менеджеру.
Отправка менеджеру запроса
DELETE /instances/objectsс указанным атрибутомinstance_idи временем сбора данных для удаления устаревших объектов, например удалённых объектов.Отправка менеджеру запроса
POST /instances/objects/post_processingдля начала постобработки.Если менеджер уже выполняет постобработку, например, если она не была завершена после предыдущего цикла сбора данных, возвращается ошибка
429 Too Many Requests. В этом случае агент завершает текущий цикл сбора данных и откладывает постобработку на следующий цикл.
3.6.1.1. Важные аспекты #
Каждый экземпляр может содержать сотни тысяч объектов, поэтому агенты собирают данные пакетами.
Размер пакетов можно указать в файле конфигурации агента
ppem-agent.ymlс помощью параметраcollectors.instance_objects.batch_size:.количество_объектов_в_каждом_пакете;Агенты отправляют расширенные запросы для сбора следующих данных таблиц и индексов:
Для таблиц:
размер таблиц по слоям
main,vmиfsmв байтахразмер раздувания в байтах
размер TOAST в байтах
количество кортежей
количество страниц
общий размер индексов в байтах
параметры хранения
путь к файлу таблицы
Для индексов:
размер индекса в байтах
размер раздувания в байтах
параметры хранения
путь к файлу индекса
Расширенные запросы могут быть ресурсоёмкими и отправляются один раз на каждые 5 циклов сбора данных, чтобы избежать перегрузки экземпляра. Частоту отправки расширенных запросов можно указать в файле конфигурации агента
ppem-agent.ymlс помощью следующих параметров:collectors.instance_objects.extended.enabled: указывает, отправляются ли расширенные запросы.Возможные значения:
truefalse
collectors.instance_objects.extended.interval: интервал для отправки расширенных запросов.Этот интервал также можно указать в формате crontab с помощью параметра
collectors.instance_objects.extended.schedule. Этот параметр имеет приоритет передcollectors.instance_objects.extended.interval.
Агенты собирают информацию о зависимостях составных объектов, таких как базы данных, схемы и таблицы. На основании этой информации после завершения цикла сбора данных менеджер генерирует сводную информацию.
Агенты автоматически переподключаются к экземпляру СУБД Postgres Pro один раз на каждые 10 запросов, чтобы избежать раздувания кеша соответствующего обслуживающего процесса.
3.6.2. Постобработка #
Постобработка менеджером состоит из следующих этапов:
Обновление поля
size_bytesсобранных объектов:Для таблиц значение рассчитывается как:
размер_отношения+размер_карты_видимости+размер_карты_свободного_пространства+размер_TOASTДля индексов значение равно
размер_отношения.Для схем и баз данных значение — общий размер всех их зависимостей.
Примечание
Размер таблиц схемы
pg_toastне учитывается, так как он включён в размер таблиц базы данных.Повторная генерация следующей сводной информации для всех составных объектов:
Для баз данных:
общая сумма размеров таблиц в байтах
общая сумма размеров индексов в байтах
количество таблиц
количество индексов
общее раздувание в байтах
available_xid_totalиavailable_xid_percent
Для схем:
количество таблиц
количество индексов
размер и раздувание таблиц
размер и раздувание индексов
Для таблиц:
количество индексов
общая сумма размеров индексов
общая сумма размеров раздувания
Сводная информация хранится в таблице
instance_objectsв виде столбца JSONB. Структура сводной информации зависит от типа составного объекта:database: tables_count: INT tables_all_size_bytes: BIGINT tables_all_bloat_size_bytes: BIGINT indexes_count: INT indexes_all_size_bytes: BIGINT indexes_all_bloat_size_bytes: BIGINT available_xid_total: BIGINT available_xid_percent: BIGINT schema: tables_count: INT tables_all_size_bytes: BIGINT tables_all_bloat_size_bytes: BIGINT indexes_count: INT indexes_all_size_bytes: BIGINT indexes_all_bloat_size_bytes: BIGINT table: indexes_count: INT indexes_all_size_bytes: BIGINT indexes_all_bloat_size_bytes: BIGINT