Сбор данных экземпляров агентами состоит из следующих этапов:
Подключение к базе данных экземпляра по умолчанию.
Сбор глобальных объектов:
роли
табличные пространства
базы данных
Сбор локальных объектов для каждой базы данных:
расширения
схемы
таблицы
индексы
последовательности
функции
языки
Отправка собранных объектов менеджеру.
Отправка менеджеру запроса DELETE /instances/objects с указанным атрибутом instance_id и временем сбора данных для удаления устаревших объектов, например удалённых объектов.
Отправка менеджеру запроса POST /instances/objects/post_processing для начала постобработки.
Если менеджер уже выполняет постобработку, например, если она не была завершена после предыдущего цикла сбора данных, возвращается ошибка 429 Too Many Requests. В этом случае агент завершает текущий цикл сбора данных и откладывает постобработку на следующий цикл.
Каждый экземпляр может содержать сотни тысяч объектов, поэтому агенты собирают данные пакетами.
Размер пакетов можно указать в файле конфигурации агента ppem-agent.yml с помощью параметра collectors.instance_objects.batch_size: .количество_объектов_в_каждом_пакете;
Агенты отправляют расширенные запросы для сбора следующих данных таблиц и индексов:
Для таблиц:
размер таблиц по слоям main, vm и fsm в байтах
размер раздувания в байтах
размер TOAST в байтах
количество кортежей
количество страниц
общий размер индексов в байтах
параметры хранения
путь к файлу таблицы
Для индексов:
размер индекса в байтах
размер раздувания в байтах
параметры хранения
путь к файлу индекса
Расширенные запросы могут быть ресурсоёмкими и отправляются один раз на каждые 5 циклов сбора данных, чтобы избежать перегрузки экземпляра. Частоту отправки расширенных запросов можно указать в файле конфигурации агента ppem-agent.yml с помощью следующих параметров:
collectors.instance_objects.extended.enabled: указывает, отправляются ли расширенные запросы.
Возможные значения:
true
false
collectors.instance_objects.extended.interval: интервал для отправки расширенных запросов.
Этот интервал также можно указать в формате crontab с помощью параметра collectors.instance_objects.extended.schedule. Этот параметр имеет приоритет перед collectors.instance_objects.extended.interval.
Агенты собирают информацию о зависимостях составных объектов, таких как базы данных, схемы и таблицы. На основании этой информации после завершения цикла сбора данных менеджер генерирует сводную информацию.
Агенты автоматически переподключаются к экземпляру СУБД Postgres Pro один раз на каждые 10 запросов, чтобы избежать раздувания кеша соответствующего обслуживающего процесса.
Постобработка менеджером состоит из следующих этапов:
Обновление поля 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