Skip to content

Описание

Пакет greenplum.maintenance_pack представляет собой набор инструментов для автоматизации администрирования и обслуживания баз данных GreenPlum.

В состав пакета greenplum.maintenance_pack входят следующие компоненты:

  • Пакет умного вакуума (greenplum.smart_vacuum)
    Обеспечивает интеллектуальное вакуумирование таблиц, анализируя необходимость операции.
    Подробнее см. в разделе greenplum.smart_vacuum.

  • Механизм прерывания сессий (greenplum.sessions_management)
    Автоматически идентифицирует и завершает сессии в соответствии с параметрами, настраиваемыми пользователем.
    Подробнее см. в разделе greenplum.sessions_management.

  • Пакет управления партициями таблиц (greenplum.partition_management)
    Позволяет автоматизировать процессы создания и удаления партиций для таблиц.
    Подробнее см. в разделе greenplum.partition_management.

  • Скрипт сжатия и очистки логов (greenplum.purge_gp_logs)
    Сжимает и очищает логи базы данных во всех сегментах кластера.

Перед началом работы с компонентами greenplum.maintenance_pack необходимо выполнить установку и настройку. Подробнее на соответствующих страницах:

greenplum.smart_vacuum

В состав пакета greenplum.smart_vacuum входят следующие компоненты:

  • Таблица исключений (do_awh_toolkit.smart_vacuum_exclusions)
    Содержит перечень объектов, для которых не требуется выполнять вакуумирование.

    В состав таблицы исключений входят следующие поля:

    • schema_exclusion - маска для схемы-исключения
    • relation_exclusion - маска для таблицы-исключения
  • Представление с кандидатами для вакуума (do_awh_toolkit.v_smart_vacuum_candidates)
    В представлении формируется перечень объектов, для которых необходимо выполнять вакуумирование на основе их текущего состояния.

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

Процедуры вакуумирования запускаются по расписанию с помощью сторонней системы (например, crontab).

Алгоритм работы

  1. В представлении do_awh_toolkit.v_smart_vacuum_candidates формируется перечень объектов, для которых необходимо выполнять вакуумирование на основе их текущего состояния.
  2. По расписанию запускается скрипт, который считывает параметры из настроечного файла и анализирует данные из представления do_awh_toolkit.v_smart_vacuum_candidates для принятия решения о необходимости вакуумирования каждой таблицы:
    1. Если в таблице количество "мертвых" кортежей превышает установленное пороговое значение (по умолчанию 1000, определяется параметром dead_tuples_treshhold), то запускается вакуумирование.
    2. Если при этом процент "мертвых" кортежей в таблице превышает установленное пороговое значение (по умолчанию 75%, определяется параметром full_vacuum) и конфигурация разрешает выполнение полного вакуума, то запускается полное вакуумирование.
    3. Пропускаются таблицы, для которых операция вакуумирования выполнялась менее определённого времени назад (по умолчанию 4 часа, настраивается параметром last_vacuum_soft). Однако, если с момента последнего вакуумирования прошло значительное время (по умолчанию 48 часов, настраивается параметром last_vacuum_hard), то принудительно выполняется вакуумирование независимо от количества "мёртвых" кортежей в таблице.
    4. По умолчанию выполняется сбор статистики.
    5. Пропускаются заблокированные таблицы. Для этих таблиц будет выполнена повторная попытка обработки при следующей итерации вакуумирования.
    6. Пропускаются объекты, указанные в таблице исключений (do_awh_toolkit.smart_vacuum_exclusions).

Запуск обслуживания

Для старта вакуума требуется выполнить скрипт smart_vacuum_gp6.py из каталога ~/do_awh_toolkit/smart_vacuum:

usage: smart_vacuum_gp6.py [-h] --host HOST --db DB [--user USER]
                           [--password PASSWORD]
                           [--execution-time EXECUTION_TIME]
                           [--last-vacuum-soft LAST_VACUUM_SOFT]
                           [--last-vacuum-hard LAST_VACUUM_HARD]
                           [--dead-tuples-threshold DEAD_TUPLES_THRESHOLD]
                           [--full-vacuum-allowed FULL_VACUUM_ALLOWED]
                           [--perform-analyze PERFORM_ANALYZE]
                           [--log-level LOG_LEVEL] [--dry-pass DRY_PASS]
Описание параметров представлено в таблице ниже:

Параметр Описание Значение по умолчанию Обязательность
--host Мастер-нода кластера ГП - да
--db Наименование базы данных, для которой будут выполняться операции обслуживания и вакуумирования - да
--user Учетная запись пользователя, от имени которой будут выполнены операции вакуумирования gpadmin нет
--execution-time Максимальное время выполнения процесса обслуживания.
Ограничивает время работы в секундах
1800 нет
--last-vacuum-soft "Мягкий" порог вакуума.
Устанавливает минимальный интервал в часах между операциями вакуумирования для таблиц. Таблицы будут обрабатываться только при превышении этого интервала и при соответствии критериям по количеству "мертвых" кортежей
4 нет
--last-vacuum-hard "Жесткий" порог вакуума.
Устанавливает максимально допустимый интервал в часах между операциями вакуумирования. Таблицы, не вакуумированные дольше этого времени, будут обработаны независимо от количества "мертвых" кортежей
48 нет
--dead-tuples-threshold Порог вакуума по количеству "мертвых" кортежей.
Определяет минимальное количество "мертвых" кортежей в таблице, необходимое для инициирования вакуума. Таблицы с меньшим количеством "мертвых" кортежей пропускаются при условии, что время с последнего вакуума не превышает "жесткий" порог
1000 нет
--full-vacuum-allowed Разрешить полный вакуум. При включении этого параметра, объекты, у которых процент мертвых строк превышает 75, будут провакуумированы с опцией --full Y нет
--perform-analyze Выполнять ли сбор статистики сразу после вакуума объекта N нет
--log-level Уровень логирования: DEBUG, INFO, WARNING, ERROR, CRITICAL INFO нет

greenplum.sessions_management

В состав механизма greenplum.sessions_management входят следующие компоненты:

  • Таблица исключений (do_awh_toolkit.sessions_mgmt_user_exclusions)
    Содержит список идентификаторов (OID) пользователей, сессии которых не подлежат автоматическому прерыванию. Система управления сессиями полностью исключает этих пользователей из процесса проверки.
    Помимо бизнес-учетных записей в список исключений рекомендуется включать технические учетные записи (ТУЗ), например, gpadmin.

  • Таблица (do_awh_toolkit.sessions_mgmt_user_profiles)
    Содержит основные настройки контроля сессий пользователей, определяющие пороговые значения для различных параметров мониторинга.

  • Таблица (do_awh_toolkit.sessions_mgmt_schedules)
    Определяет расписание выполнения проверок сессий, устанавливая временные интервалы, в течение которых должны применяться определенные параметры контроля.

Структура таблиц do_awh_toolkit.sessions_mgmt_user_profiles и do_awh_toolkit.sessions_mgmt_schedules представлена ниже:

Столбец Тип данных Описание
schedule_id oid ID (приоритет) расписания. При конфликте расписаний выполняется правило с большим ID
schedule_description text Описание расписания
profile_id oid ID профиля из таблицы do_awh_toolkit.sessions_mgmt_user_profiles, к которому привязано расписание
schedule_start_tm time Время начала действия расписания (00:00 - 24:00)
schedule_end_tm time Время окончания действия расписания (00:00 - 24:00)
idle_tm interval Максимально допустимое время пребывания сессии в idle
idle_in_tx_tm interval Максимально допустимое время пребывания сессии в idle in transaction
session_duration_tm interval Допустимая продолжительность коннекта сессии
query_duration_tm interval Допустимое время выполнения текущего запроса
xact_duration_tm interval Допустимое время выполнения текущей транзакции
spill_size_gb int4 Допустимый суммарный объем спилл-файлов на сессию
spill_file_num int4 Допустимое суммарное количество спилл-файлов на сессию
query_regexp text Регулярное выражение, описывающее надопустимые запросы для сессии

Процедуры вакуумирования запускаются по расписанию с помощью сторонней системы (например, crontab).

Механизм реализован в виде хранимой процедуры на языке PL/pgSQL.

Процедура запускается на периодической основе согласно заданному расписанию и осуществляет поиск сессий на основе параметров, заданных в таблицах do_awh_toolkit.sessions_mgmt_user_profiles и do_awh_toolkit.sessions_mgmt_schedules.

После обнаружения соответствующих сессий механизм анализирует их состояние и выполняет либо отключение сессии, превысившей допустимое время бездействия, либо прерывание активного запроса, выполнение которого превышает установленные лимиты времени. Данная обработка не затрагивает сесии пользователей, внесенные в таблицу исключений do_awh_toolkit.sessions_mgmt_user_exclusions.

Алгоритм работы

  1. Определяются сессии в состоянии idle in transaction, длительность которых превышает заданный порог, после чего происходит их принудительное завершение с использованием функции pg_terminate_backend().
  2. Определяются сессии в состоянии idle, длительность которых превышает заданный порог, после чего выполняется их принудительное прерывание через функцию pg_terminate_backend().
  3. Определяются сессии в активном состоянии (не idle и не idle in transaction), у которых либо общая длительность сессии, либо время выполнения текущего запроса, либо время выполнения текущей транзакции превышает заданное значение, после чего выполняется прерывание активного запроса через функцию pg_cancel_backend().
  4. Определяются сессии, у которых суммарный объем или количество используемых спилл-файлов превышает установленные квоты, после чего выполняется прерывание их активных запросов с помощью функции pg_cancel_backend().
  5. Определяются сессии, выполняющие запросы, значения которых совпадают с заданным POSIX-регулярным выражением, после чего выполняется прерывание этих запросов с помощью функции pg_cancel_backend().

Правила прерывания сессий

Параметры контроля сессий настраиваются в таблице do_awh_toolkit.sessions_mgmt_schedules и включают в себя:

  • продолжительность сессии
  • допустимый объем спилл-файлов и т.д.

Для каждого набора параметров определяется:

  • время начала и окончания работы (расписание действия)
  • приоритет

Система использует иерархический подход к применению настроек:

  1. Каждое расписание привязывается к профилю пользователя
  2. Профиль связывается с учетной записью (одна учетная запись может быть связана только с одним профилем)
  3. Профиль может соответствовать нескольким учетным записям

В случае, когда текущему моменту времени соответствует несколько расписаний, система применяет расписание с наивысшим приоритетом.

Если для профиля в текущий момент времени не определено ни одного активного расписания, используются стандартные параметры профиля из таблицы do_awh_toolkit.sessions_mgmt_user_profiles.

Для учетных записей без явной привязки к профилю в таблице do_awh_toolkit.sessions_mgmt_users система автоматически применяет параметры профиля по умолчанию, определенного в таблице do_awh_toolkit.sessions_mgmt_user_profiles.

Критерии определения проблемных сессий

Сессии в состоянии idle in transaction

Представляют собой неактивные подключения к базе данных с начатой, но не завершенной транзакцией.

Правило обнаружения

Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:

  1. Сессия находится в состоянии idle in transaction (current_state = 'idle in transaction')

  2. Время с момента перехода в это состояние превышает установленный лимит: state_change < current_timestamp – {setting_value}

При определении лимита учитывается текущее время и применяется правило, действующее в промежуток от {valid_from_tm} до {valid_from_tm+valid_for}. Если активно несколько правил, выбирается правило с наибольшим приоритетом.

Параметры правила
Название параметра Пример значения Описание
IDLE_IN_TX_TM '20 minutes' Максимально допустимая продолжительность пребывания сессии в состоянии idle in transaction. Задается как интервал

Сессии в состоянии idle

Представляют собой неактивные подключения к базе данных, не имеющие открытых транзакций.

Правило обнаружения

Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:

  1. Сессия находится в состоянии бездействия: current_query = '<idle>' или current_state = 'idle'

  2. Время с момента перехода в неактивное состояние превышает установленный лимит: state_change < current_timestamp – {setting_value}

Параметры правила
Название параметра Пример значения Описание
IDLE_TM '5 hours' Максимально допустимая продолжительность пребывания сессии в состоянии idle. Задается как интервал

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

Представляют собой подключения к базе данных, которые остаются активными дольше установленных временных лимитов.

Правило обнаружения

Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:

  1. current_query <> '<IDLE>' и current_state <> 'idle in transaction' и current_state <> 'idle'
  2. backend_start < current_timestamp – {setting_value} для активного значения параметра SESSION_DURATION_TM
  3. query_start < current_timestamp – {setting_value} для активного значения параметра QUERY_DURATION_TM
  4. xact_start < current_timestamp – {setting_value} для активного значения параметра XACT_DURATION_TM
Параметры правила
Название параметра Пример значения Описание
SESSION_DURATION_TM '12 hours' Максимально допустимая длительность сессии, включая время ожидания в очереди на ресурсы. Задается как интервал. При значении NULL данная проверка не выполняется
QUERY_DURATION_TM '2 hours' Максимально допустимая длительность запроса, начиная с первой транзакции. Задается как интервал. При значении NULL данная проверка не выполняется
XACT_DURATION_TM '20 minutes' Максимально допустимая длительность транзакции. Задается как интервал. При значении NULL данная проверка не выполняется
IDLE_TM '5 hours' Максимально допустимая продолжительность пребывания сессии в состоянии idle. Задается как интервал

Потребление ресурсов

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

Правило обнаружения

Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:

  1. current_query <> '<IDLE>' и current_state <> 'idle in transaction' и current_state <> 'idle'
  2. По gp_toolkit.gp_workfile_usage_per_query потребление cпилл-файлов превышает установленные лимиты
Параметры правила
Название параметра Пример значения Описание
spill_size_gb 100 Максимальный суммарный размер cпилл-файлов (в гигабайтах) для одного запроса
spill_file_num 50 Максимальное суммарное количество cпилл-файлов для одного запроса

Запрос по маске

Представляет собой механизм обнаружения сессий, выполняющих запросы, соответствующие заданному шаблону или регулярному выражению.

Правило обнаружения

Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:

  1. current_query <> '<IDLE>' и current_state <> 'idle in transaction' и current_state <> 'idle'
  2. Поле query содержит в себе POSIX-регулярное выражение из поля query_regexp без учета регистра

greenplum.partition_management

В состав пакета управления партициями таблиц greenplum.partition_management входят следующие компоненты:

  • Таблица управления (do_awh_toolkit.partitions_mgmt_control)
    Содержит перечень объектов, для которых требуется создавать партиции на периодической основе, а также параметры управления этими партициями.

  • Таблица логирования (do_awh_toolkit.partitions_mgmt_workflow_log)
    Фиксирует результаты выполнения операций создания и удаления партиций.

  • Процедура создания партиций (do_awh_toolkit.partitions_mgmt_create_prt)
    Создает новые партиции для таблиц, указанных в таблице управления, согласно установленным правилам.

  • Процедура удаления партиций (do_awh_toolkit.partitions_mgmt_drop_prt)
    Удаляет устаревшие партиции согласно заданным в таблице управления срокам хранения.

  • Представление для мониторинга (do_awh_toolkit.v_partitions_mgmt_monitoring)
    Обеспечивает возможность контроля текущего состояния автоматически управляемых партиций.

Структура таблицы управления do_awh_toolkit.partitions_mgmt_control представлена ниже:

Столбец Тип данных Обязательность Описание
id serial Да ID записи, явное внесение не требуется
nspname text Да Имя схемы объекта
tabname text Да Имя таблицы
prt_length interval Да Требуемый размер партиции
prt_lifetime interval Нет Срок сохранения партиции. При null – партиция хранится вечно
prt_options text Да Опции создания партиции. Значение по умолчанию - appendonly = 'false'

Процедуры управления партициями запускаются по расписанию с помощью сторонней системы (например, crontab).

Алгоритм работы

  1. Создание новых партиций
    Процедура do_awh_toolkit.partitions_mgmt_create_prt(int) осуществляет сопоставление объектов из таблицы управления с текущими партицированными таблицами посредством выполнения inner join между таблицей управления и системным представлением pg_partitions.
    За одну итерацию процедура создает не более одной дополнительной партиции для каждого объекта, для которого верхняя граница последней существующей партиции не превышает пороговое значение, рассчитываемое как "начало текущего месяца + два месяца".
    Количество итераций можно задать через параметр процедуры, например: do_awh_toolkit.partitions_mgmt_create_prt(12);

  2. Удаление устаревших партиций
    Процедура do_awh_toolkit.partitions_mgmt_drop_prt() выполняет автоматическое удаление устаревших партиций для объектов, перечисленных в таблице управления. Партиция считается подлежащей удалению, если её верхняя граница равна или превышает расчетное значение, определяемое как "начало текущего месяца + значение параметра prt_lifetime" для соответствующего объекта. Если партиция не имеет собственного имени, удаляется самая первая партиция (при соблюдении указанного выше условия).