3.6. Сбор и постобработка данных экземпляров #

3.6.1. Сбор данных экземпляра #

Сбор данных экземпляров агентами состоит из следующих этапов:

  1. Подключение к базе данных экземпляра по умолчанию.

  2. Сбор глобальных объектов:

    • роли

    • табличные пространства

    • базы данных

  3. Сбор локальных объектов для каждой базы данных:

    • расширения

    • схемы

    • таблицы

    • индексы

    • последовательности

    • функции

    • языки

  4. Отправка собранных объектов менеджеру.

  5. Отправка менеджеру запроса DELETE /instances/objects с указанным атрибутом instance_id и временем сбора данных для удаления устаревших объектов, например удалённых объектов.

  6. Отправка менеджеру запроса 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: указывает, отправляются ли расширенные запросы.

      Возможные значения:

      • true

      • false

    • collectors.instance_objects.extended.interval: интервал для отправки расширенных запросов.

      Этот интервал также можно указать в формате crontab с помощью параметра collectors.instance_objects.extended.schedule. Этот параметр имеет приоритет перед collectors.instance_objects.extended.interval.

  • Агенты собирают информацию о зависимостях составных объектов, таких как базы данных, схемы и таблицы. На основании этой информации после завершения цикла сбора данных менеджер генерирует сводную информацию.

  • Агенты автоматически переподключаются к экземпляру СУБД Postgres Pro один раз на каждые 10 запросов, чтобы избежать раздувания кеша соответствующего обслуживающего процесса.

3.6.2. Постобработка #

Постобработка менеджером состоит из следующих этапов:

  1. Обновление поля size_bytes собранных объектов:

    • Для таблиц значение рассчитывается как:

      размер_отношения + размер_карты_видимости + размер_карты_свободного_пространства + размер_TOAST

    • Для индексов значение равно размер_отношения.

    • Для схем и баз данных значение — общий размер всех их зависимостей.

    Примечание

    Размер таблиц схемы pg_toast не учитывается, так как он включён в размер таблиц базы данных.

  2. Повторная генерация следующей сводной информации для всех составных объектов:

    • Для баз данных:

      • общая сумма размеров таблиц в байтах

      • общая сумма размеров индексов в байтах

      • количество таблиц

      • количество индексов

      • общее раздувание в байтах

      • 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