Инструментарий arenadata_toolkit
При установке кластера ADB в базе данных автоматически создается схема arenadata_toolkit. Эта схема предназначена для сбора информации о работе кластера. Входящие в состав схемы таблицы позволяют просмотреть результаты проводимых по расписанию операций VACUUM/ANALYZE, данные о размещении файлов БД и другое. Кроме этого, с ADB поставляется набор взаимодействующих со схемой arenadata_toolkit скриптов, которые в автоматическом режиме (согласно настроенному расписанию) выполняют различные операции по управлению кластером.
|
ПРИМЕЧАНИЕ
В пользовательских БД, которые добавляются после установки ADB, схема |
Таблицы схемы arenadata_toolkit
Входящие в состав arenadata_toolkit таблицы описаны ниже.
Таблица arenadata_toolkit.daily_operation партиционирована по месяцам и содержит информацию об операциях VACUUM и ANALYZE, проводимых над таблицами базы данных автоматически по расписанию. Содержимое таблицы обновляется ежедневно при запуске соответствующих скриптов vacuum, analyze, vacuum_analyze_pg_catalog.
| Столбец | Описание |
|---|---|
schema_name |
Название схемы |
table_name |
Название таблицы |
action |
Название операции. Возможные значения:
|
status |
Статус операции. Возможные значения:
|
time |
Длительность операции (в секундах) |
processed_dttm |
Дата и время операции |
Таблица arenadata_toolkit.db_files_current содержит актуальную на момент последнего запуска скрипта collect_table_stats информацию о файлах БД на всех сегментах кластера с привязкой к таблицам, индексам и другим объектам БД (при возможности определения таких связей). Таблица перезаписывается при каждом запуске скрипта.
| Столбец | Описание |
|---|---|
oid |
Внутренний идентификатор таблицы (OID) |
table_name |
Название таблицы |
table_schema |
Название схемы |
type |
Тип таблицы. См. pg_class.relkind |
relamname |
Метод доступа к таблице. См. pg_am.amname |
table_parent_table |
Название родительской таблицы ( |
table_parent_schema |
Схема родительской таблицы ( |
table_database |
Название базы данных, которой принадлежит таблица |
table_tablespace |
Название табличного пространства, которому принадлежит таблица |
content |
Номер сегмента, где физически расположен файл с данными. См. gp_segment_configuration.content |
segment_preferred_role |
Роль, назначенная сегменту при инициализации системы. См. gp_segment_configuration.preferred_role |
hostname |
Имя хоста, на котором расположен файл с данными |
address |
Адрес хоста, используемый для доступа к конкретному сегменту на сегмент-хосте. Может совпадать со значением |
file |
Полный путь к файлу с данными |
modifiedtime |
Время последней модификации файла с данными, возвращаемое системной командой |
file_size |
Размер файла с данными в байтах |
tablespace_location |
Место хранения табличного пространства в файловой системе |
Таблица arenadata_toolkit.db_files_history партиционирована по месяцам и хранит историю изменений файлов БД на всех сегментах кластера с привязкой к таблицам, индексам и другим объектам БД (при возможности определения таких связей). Таблица может быть полезна для отслеживания динамики изменения размера БД. Структура таблицы полностью идентична arenadata_toolkit.db_files_current за исключением дополнительного поля collecttime, описанного ниже.
Содержимое arenadata_toolkit.db_files_history обновляется ежедневно при каждом запуске скрипта collect_table_stats (путем копирования актуальных данных из arenadata_toolkit.db_files_current). Таблица не очищается.
| Столбец | Описание |
|---|---|
collecttime |
Дата и время сбора информации |
Таблица arenadata_toolkit.operation_exclude содержит информацию о схемах БД, к которым не требуется применять операции VACUUM и ANALYZE при запуске соответствующих скриптов vacuum и analyze.
| Столбец | Описание |
|---|---|
schema_name |
Название схемы |
backup |
Необходимо ли, чтобы строка (запись о схеме) попадала в бэкап при использовании утилит |
Скрипты для обслуживания кластера
Обзор
Скрипты, поставляемые с кластером ADB для его обслуживания, отображаются на вкладке Primary configuration страницы конфигурирования сервиса ADB. Для просмотра списка скриптов необходимо раскрыть узел Crontab → Crontab maintenance scripts в дереве конфигурационных настроек.
|
ВНИМАНИЕ
Если необходима настройка кастомных скриптов, используйте системный |
Для запуска скриптов используется планировщик cron. Запуск производится от имени системного пользователя (по умолчанию gpadmin). В интерфейсе ADCM каждый скрипт описывается в виде отдельной строки, включающей:
-
Время запуска скрипта —
cron-выражение, описывающее периодичность выполнения скрипта. -
Путь к скрипту — полный путь к скрипту. В настоящий момент используются два основных скрипта:
-
run_sql_to_gpssh.sh — передает результат выбранного SQL-запроса как bash-команду через
gpssh. В качестве аргумента требуется указать путь к SQL-скрипту. -
operation.py — Python-скрипт, который выполняет различные операции на уровне кластера ADB. Тип операции определяется первым аргументом (например,
vacuumилиanalyze).
Каждый из перечисленных скриптов может, в свою очередь, обращаться к иным SQL-запросам, скриптам и внутренним функциям схемы
arenadata_toolkit. Все используемые bash-, Python- и SQL-скрипты хранятся в директории /home/gpadmin/<Arenadata_configs_directory_name>/, где<Arenadata_configs_directory_name>— значение конфигурационного параметра сервиса ADB Advanced → Arenadata configs directory name (по умолчаниюarenadata_configs). -
-
Аргументы — входные параметры, необходимые для запуска скрипта (при их наличии). Аргументы, доступные для скрипта operation.py, перечислены ниже.
| Аргумент | Описание | Значение по умолчанию |
|---|---|---|
Первый позиционный аргумент в списке (без alias) |
Имя запрашиваемой операции:
Описание каждой операции приведено в таблице Описание скриптов для обслуживания ADB |
— |
--loglevel |
Уровень логирования. Возможные значения:
Информацию об уровнях логирования можно получить в документации Python |
2 |
--processes |
Число процессов-обработчиков. Возможные значения: |
10 |
--timelimit |
Ограничение на время работы скрипта (в минутах). По истечении указанного времени скрипт доведет до конца обработку текущего объекта и остановится:
Когда используется несколько обработчиков (через |
— |
--excludedb |
Список БД, которые необходимо исключить из обработки — в дополнение к тем, что игнорируются скриптом operation.py по умолчанию:
|
— |
--vacuum-order |
Порядок, в котором команда
|
newest-first |
Логи запуска скриптов сохраняются в директории /home/gpadmin/<Arenadata_configs_directory_name>/operation_log/ (для скрипта operation.py) и файле gzip_pg_log.log (для скрипта gzip_pg_log.sql). Периодичность очистки логов можно настроить с помощью конфигурационного параметра сервиса ADB Crontab → Delete old maintenance script logs. Значение параметра по умолчанию — 30 дней.
|
РЕКОМЕНДАЦИЯ
Вносить изменения в скрипты не рекомендуется. Однако, если для какого-либо скрипта требуется обновить время запуска либо добавить/изменить аргументы, следуйте шагам ниже:
|
Большинство скриптов так или иначе взаимодействует со схемой arenadata_toolkit. Назначение скриптов описано ниже.
| Номер | Скрипт | Описание | Время запуска в формате HH:mm (UTC) |
|---|---|---|---|
0 |
run_sql_to_gpssh.sh → gzip_pg_log.sql |
Для каждого сегмента кластера архивирует CSV-логи, которые хранятся в <data_directory>/pg_log и не изменялись более 3 дней (где |
01:00 |
1 |
operation.py → vacuum_system_db |
Запускает операцию VACUUM FREEZE для системных БД |
02:00 |
2 |
operation.py → remove_orphaned_temp_schemas |
Во всех пользовательских БД удаляет более не используемые временные схемы, имена которых начинаются на |
03:00 |
3 |
operation.py → vacuum |
|
06:00 |
4 |
operation.py → analyze |
|
11:00 |
5 |
operation.py → collect_table_stats |
Для всех пользовательских БД:
|
21:00 |
6 |
operation.py → vacuum_analyze_pg_catalog |
|
00:04 08:04 16:04 |
7 |
gzip_gpadmin_log.sh |
Выполняет автоматическое сжатие файлов логов, расположенных в папке /home/gpadmin/gpAdminLogs/ и созданных более 3 дней назад |
01:00 |
Пример использования кастомной функции для VACUUM
Ниже приведен пример использования кастомной функции, определяющей порядок, в котором должны обрабатываться таблицы пользовательских БД при выполнении операции VACUUM (см. --vacuum-order в таблице Аргументы скрипта operation.py):
-
Создайте необходимую функцию, удовлетворяющую следующим условиям:
-
Наличие одного входного параметра типа
text. При запуске скрипта operation.py в качестве этого параметра всегда передается значениеVACUUM. В теле функции он может не использоваться. -
Функция должна возвращать набор строк со столбцами
table_schema(имя схемы БД) иtable_name(имя таблицы БД). Это отсортированный перечень таблиц БД, к которым следует применить операциюVACUUM.
Предположим, некие ETL-данные в тестовом окружении требуется обрабатывать операцией
VACUUMв последнюю очередь. Приведенная ниже функция помещает все таблицы, названия которых начинаются сetl_staging, в конец списка, а также сортирует таблицы по имени схемы и самой таблицы в алфавитном порядке.CREATE OR REPLACE FUNCTION public.adb_vacuum_strategy_etl_staging(actionname text) RETURNS TABLE (table_schema name, table_name name) LANGUAGE sql STABLE AS $$ SELECT nspname, relname FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON relnamespace = n.oid WHERE relkind = 'r' AND nspname NOT IN (SELECT schema_name FROM arenadata_toolkit.operation_exclude) ORDER BY CASE WHEN relname LIKE 'etl_staging%' THEN 1 ELSE 0 END, nspname, relname; $$ EXECUTE ON MASTER;ВНИМАНИЕФункцию необходимо добавить во все пользовательские БД, к которым будет применяться операция
VACUUM, т.е. во все БД за исключением системных (template0,template1,postgres) и тех, что опционально могут быть указаны в аргументе --excludedb скрипта operation.py. -
-
Убедитесь в работоспособности функции:
SELECT * FROM public.adb_vacuum_strategy_etl_staging('VACUUM');В результате таблицы, относящиеся к ETL-данным в тестовом окружении (
etl_staging_*), помещаются в самый низ списка:table_schema | table_name -------------------+------------------- arenadata_toolkit | daily_operation_1_prt_other arenadata_toolkit | daily_operation_1_prt_p202510 arenadata_toolkit | daily_operation_1_prt_p202511 arenadata_toolkit | db_files_current arenadata_toolkit | db_files_history_1_prt_other arenadata_toolkit | db_files_history_1_prt_p202510 arenadata_toolkit | db_files_history_1_prt_p202511 arenadata_toolkit | operation_exclude kadb | offsets public | spatial_ref_sys public | etl_staging_main public | etl_staging_orders public | etl_staging_products public | etl_staging_users (14 rows)
-
В интерфейсе ADCM откройте вкладку Primary configuration страницы конфигурирования сервиса ADB.
-
Раскройте узел Crontab → Crontab maintenance scripts в дереве конфигурационных настроек и нажмите на описание скрипта, выполняющего операцию
vacuum.
Переход к редактированию аргументов скрипта -
В открывшемся окне добавьте в конец строки аргумент
--vacuum-order <schema_name>.<function_name>. Пример:--vacuum-order public.adb_vacuum_strategy_custom. Нажмите Apply.ВАЖНОИмя кастомной функции заполняется в формате
<schema_name>.<function_name>, где<schema_name>— имя схемы, в которой создана функция;<function_name>— имя функции. Обратите внимание, что передача аргументов в функцию не поддерживается.
Добавление аргумента --vacuum-order -
Нажмите Save для сохранения изменений конфигурации и примените действие Reconfigure к сервису ADB.
Сохранение изменений в конфигурации ADB -
После запуска скрипта operation.py согласно установленному расписанию просмотрите содержимое лога, созданного в директории /home/gpadmin/<Arenadata_configs_directory_name>/operation_log/ (по умолчанию /home/gpadmin/arenadata_configs/operation_log/). В названии лога фиксируется дата и время запуска — например, 2025-11-10_10:05:01.172592.log.
Убедитесь, что порядок обработки таблиц соответствует тому, что определен в кастомной функции. Для этого просмотрите записи лога с пометкой
DO, означающие запуск командыVACUUMдля соответствующих таблиц.Обратите внимание, что порядок событий с одинаковой временной отметкой в логе может отличаться от фактического. В этом случае обратите внимание на идентификаторы процессов-обработчиков
ForkPoolWorker: чем меньше номер, тем раньше начало обработки.Фрагмент лога по операции VACUUM2025-11-10 08:25:02,665: INFO: ForkPoolWorker-3: pid=3437270: DO: 'vacuum "arenadata_toolkit"."daily_operation_1_prt_p202511";' for 'adb' 2025-11-10 08:25:02,665: INFO: ForkPoolWorker-7: pid=3437279: DO: 'vacuum "arenadata_toolkit"."db_files_history_1_prt_p202511";' for 'adb' 2025-11-10 08:25:02,665: INFO: ForkPoolWorker-2: pid=3437269: DO: 'vacuum "arenadata_toolkit"."daily_operation_1_prt_p202510";' for 'adb' 2025-11-10 08:25:02,665: INFO: ForkPoolWorker-1: pid=3437268: DO: 'vacuum "arenadata_toolkit"."daily_operation_1_prt_other";' for 'adb' 2025-11-10 08:25:02,665: INFO: ForkPoolWorker-4: pid=3437272: DO: 'vacuum "arenadata_toolkit"."db_files_current";' for 'adb' 2025-11-10 08:25:02,665: INFO: ForkPoolWorker-5: pid=3437275: DO: 'vacuum "arenadata_toolkit"."db_files_history_1_prt_other";' for 'adb' 2025-11-10 08:25:02,667: INFO: ForkPoolWorker-10: pid=3437285: DO: 'vacuum "public"."etl_process_logs";' for 'adb' 2025-11-10 08:25:02,667: INFO: ForkPoolWorker-8: pid=3437281: DO: 'vacuum "arenadata_toolkit"."operation_exclude";' for 'adb' 2025-11-10 08:25:02,669: INFO: ForkPoolWorker-9: pid=3437283: DO: 'vacuum "kadb"."offsets";' for 'adb' 2025-11-10 08:25:02,665: INFO: ForkPoolWorker-6: pid=3437277: DO: 'vacuum "arenadata_toolkit"."db_files_history_1_prt_p202510";' for 'adb' 2025-11-10 08:25:02,988: INFO: ForkPoolWorker-4: pid=3437272: DONE: 'vacuum "arenadata_toolkit"."db_files_current";' for 'adb' 2025-11-10 08:25:02,990: INFO: ForkPoolWorker-9: pid=3437283: DONE: 'vacuum "kadb"."offsets";' for 'adb' 2025-11-10 08:25:03,090: INFO: ForkPoolWorker-5: pid=3437275: DONE: 'vacuum "arenadata_toolkit"."db_files_history_1_prt_other";' for 'adb' 2025-11-10 08:25:03,092: INFO: ForkPoolWorker-8: pid=3437281: DONE: 'vacuum "arenadata_toolkit"."operation_exclude";' for 'adb' 2025-11-10 08:25:03,095: INFO: ForkPoolWorker-10: pid=3437285: DONE: 'vacuum "public"."etl_process_logs";' for 'adb' 2025-11-10 08:25:03,186: INFO: ForkPoolWorker-6: pid=3437277: DONE: 'vacuum "arenadata_toolkit"."db_files_history_1_prt_p202510";' for 'adb' 2025-11-10 08:25:03,186: INFO: ForkPoolWorker-2: pid=3437269: DONE: 'vacuum "arenadata_toolkit"."daily_operation_1_prt_p202510";' for 'adb' 2025-11-10 08:25:03,196: INFO: ForkPoolWorker-1: pid=3437268: DONE: 'vacuum "arenadata_toolkit"."daily_operation_1_prt_other";' for 'adb' 2025-11-10 08:25:03,398: INFO: ForkPoolWorker-3: pid=3437270: DONE: 'vacuum "arenadata_toolkit"."daily_operation_1_prt_p202511";' for 'adb' 2025-11-10 08:25:03,431: INFO: ForkPoolWorker-7: pid=3437279: DONE: 'vacuum "arenadata_toolkit"."db_files_history_1_prt_p202511";' for 'adb' 2025-11-10 08:25:03,919: INFO: ForkPoolWorker-9: pid=3437283: DO: 'vacuum "public"."etl_temp_processing";' for 'adb' 2025-11-10 08:25:04,020: INFO: ForkPoolWorker-4: pid=3437272: DO: 'vacuum "public"."spatial_ref_sys";' for 'adb' 2025-11-10 08:25:04,123: INFO: ForkPoolWorker-10: pid=3437285: DO: 'vacuum "public"."etl_staging_main";' for 'adb' 2025-11-10 08:25:04,123: INFO: ForkPoolWorker-8: pid=3437281: DO: 'vacuum "public"."etl_staging_orders";' for 'adb' 2025-11-10 08:25:04,124: INFO: ForkPoolWorker-2: pid=3437269: DO: 'vacuum "public"."etl_staging_products";' for 'adb' 2025-11-10 08:25:04,129: INFO: ForkPoolWorker-5: pid=3437275: DO: 'vacuum "public"."etl_staging_users";' for 'adb' 2025-11-10 08:25:04,326: INFO: ForkPoolWorker-4: pid=3437272: DONE: 'vacuum "public"."spatial_ref_sys";' for 'adb' 2025-11-10 08:25:04,424: INFO: ForkPoolWorker-9: pid=3437283: DONE: 'vacuum "public"."etl_temp_processing";' for 'adb' 2025-11-10 08:25:04,526: INFO: ForkPoolWorker-2: pid=3437269: DONE: 'vacuum "public"."etl_staging_products";' for 'adb' 2025-11-10 08:25:04,526: INFO: ForkPoolWorker-5: pid=3437275: DONE: 'vacuum "public"."etl_staging_users";' for 'adb' 2025-11-10 08:25:04,641: INFO: ForkPoolWorker-8: pid=3437281: DONE: 'vacuum "public"."etl_staging_orders";' for 'adb' 2025-11-10 08:25:04,727: INFO: ForkPoolWorker-10: pid=3437285: DONE: 'vacuum "public"."etl_staging_main";' for 'adb'
ВАЖНО-
Если в какой-либо БД функция отсутствует, в лог записывается сообщение вида
This function <schema_name>.<function_name> does not exist in the database. -
Если аргумент
--vacuum-orderимеет недопустимое значение (отличное отnewest-first/newest-lastи при этом не содержащее точку), в лог записывается сообщение--vacuum-order parameter is only valid for vacuum action or invalid function name.
В обоих случаях операция
VACUUMне будет применяться к БД, при обработке которых зафиксированы ошибки. -