Описание
Пакет 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).
Алгоритм работы
- В представлении do_awh_toolkit.v_smart_vacuum_candidates формируется перечень объектов, для которых необходимо выполнять вакуумирование на основе их текущего состояния.
- По расписанию запускается скрипт, который считывает параметры из настроечного файла и анализирует данные из представления do_awh_toolkit.v_smart_vacuum_candidates для принятия решения о необходимости вакуумирования каждой таблицы:
- Если в таблице количество "мертвых" кортежей превышает установленное пороговое значение (по умолчанию 1000, определяется параметром dead_tuples_treshhold), то запускается вакуумирование.
- Если при этом процент "мертвых" кортежей в таблице превышает установленное пороговое значение (по умолчанию 75%, определяется параметром full_vacuum) и конфигурация разрешает выполнение полного вакуума, то запускается полное вакуумирование.
- Пропускаются таблицы, для которых операция вакуумирования выполнялась менее определённого времени назад (по умолчанию 4 часа, настраивается параметром last_vacuum_soft). Однако, если с момента последнего вакуумирования прошло значительное время (по умолчанию 48 часов, настраивается параметром last_vacuum_hard), то принудительно выполняется вакуумирование независимо от количества "мёртвых" кортежей в таблице.
- По умолчанию выполняется сбор статистики.
- Пропускаются заблокированные таблицы. Для этих таблиц будет выполнена повторная попытка обработки при следующей итерации вакуумирования.
- Пропускаются объекты, указанные в таблице исключений (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.
Алгоритм работы
- Определяются сессии в состоянии idle in transaction, длительность которых превышает заданный порог, после чего происходит их принудительное завершение с использованием функции pg_terminate_backend().
- Определяются сессии в состоянии idle, длительность которых превышает заданный порог, после чего выполняется их принудительное прерывание через функцию pg_terminate_backend().
- Определяются сессии в активном состоянии (не idle и не idle in transaction), у которых либо общая длительность сессии, либо время выполнения текущего запроса, либо время выполнения текущей транзакции превышает заданное значение, после чего выполняется прерывание активного запроса через функцию pg_cancel_backend().
- Определяются сессии, у которых суммарный объем или количество используемых спилл-файлов превышает установленные квоты, после чего выполняется прерывание их активных запросов с помощью функции pg_cancel_backend().
- Определяются сессии, выполняющие запросы, значения которых совпадают с заданным POSIX-регулярным выражением, после чего выполняется прерывание этих запросов с помощью функции pg_cancel_backend().
Правила прерывания сессий
Параметры контроля сессий настраиваются в таблице do_awh_toolkit.sessions_mgmt_schedules и включают в себя:
- продолжительность сессии
- допустимый объем спилл-файлов и т.д.
Для каждого набора параметров определяется:
- время начала и окончания работы (расписание действия)
- приоритет
Система использует иерархический подход к применению настроек:
- Каждое расписание привязывается к профилю пользователя
- Профиль связывается с учетной записью (одна учетная запись может быть связана только с одним профилем)
- Профиль может соответствовать нескольким учетным записям
В случае, когда текущему моменту времени соответствует несколько расписаний, система применяет расписание с наивысшим приоритетом.
Если для профиля в текущий момент времени не определено ни одного активного расписания, используются стандартные параметры профиля из таблицы 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, которые соответствуют следующим критериям:
-
Сессия находится в состоянии idle in transaction (
current_state = 'idle in transaction') -
Время с момента перехода в это состояние превышает установленный лимит:
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, которые соответствуют следующим критериям:
-
Сессия находится в состоянии бездействия:
current_query = '<idle>'илиcurrent_state = 'idle' -
Время с момента перехода в неактивное состояние превышает установленный лимит:
state_change < current_timestamp – {setting_value}
Параметры правила
| Название параметра | Пример значения | Описание |
|---|---|---|
| IDLE_TM | '5 hours' | Максимально допустимая продолжительность пребывания сессии в состоянии idle. Задается как интервал |
Длительные сессии
Представляют собой подключения к базе данных, которые остаются активными дольше установленных временных лимитов.
Правило обнаружения
Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:
current_query <> '<IDLE>'иcurrent_state <> 'idle in transaction'иcurrent_state <> 'idle'backend_start < current_timestamp – {setting_value}для активного значения параметра SESSION_DURATION_TMquery_start < current_timestamp – {setting_value}для активного значения параметра QUERY_DURATION_TMxact_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, которые соответствуют следующим критериям:
current_query <> '<IDLE>'иcurrent_state <> 'idle in transaction'иcurrent_state <> 'idle'- По gp_toolkit.gp_workfile_usage_per_query потребление cпилл-файлов превышает установленные лимиты
Параметры правила
| Название параметра | Пример значения | Описание |
|---|---|---|
| spill_size_gb | 100 | Максимальный суммарный размер cпилл-файлов (в гигабайтах) для одного запроса |
| spill_file_num | 50 | Максимальное суммарное количество cпилл-файлов для одного запроса |
Запрос по маске
Представляет собой механизм обнаружения сессий, выполняющих запросы, соответствующие заданному шаблону или регулярному выражению.
Правило обнаружения
Система выявляет идентификаторы (PID) сессий из pg_catalog.pg_stat_activity, которые соответствуют следующим критериям:
current_query <> '<IDLE>'иcurrent_state <> 'idle in transaction'иcurrent_state <> 'idle'- Поле
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).
Алгоритм работы
-
Создание новых партиций
Процедура do_awh_toolkit.partitions_mgmt_create_prt(int) осуществляет сопоставление объектов из таблицы управления с текущими партицированными таблицами посредством выполнения inner join между таблицей управления и системным представлением pg_partitions.
За одну итерацию процедура создает не более одной дополнительной партиции для каждого объекта, для которого верхняя граница последней существующей партиции не превышает пороговое значение, рассчитываемое как "начало текущего месяца + два месяца".
Количество итераций можно задать через параметр процедуры, например: do_awh_toolkit.partitions_mgmt_create_prt(12); -
Удаление устаревших партиций
Процедура do_awh_toolkit.partitions_mgmt_drop_prt() выполняет автоматическое удаление устаревших партиций для объектов, перечисленных в таблице управления. Партиция считается подлежащей удалению, если её верхняя граница равна или превышает расчетное значение, определяемое как "начало текущего месяца + значение параметра prt_lifetime" для соответствующего объекта. Если партиция не имеет собственного имени, удаляется самая первая партиция (при соблюдении указанного выше условия).