Инструментарий arenadata_toolkit
При установке кластера ADB в базе данных автоматически создается схема arenadata_toolkit
. Эта схема предназначена для сбора информации о работе кластера. Входящие в состав схемы таблицы и представления позволяют просмотреть результаты проводимых по расписанию операций VACUUM
/ANALYZE
, данные о размещении файлов БД, показатели "перекоса данных" (skew) и другое. Кроме этого, с 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 |
storage |
Тип хранения данных в таблице. См. pg_class.relstorage |
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 |
Название схемы |
Представления
Схема arenadata_toolkit
содержит несколько представлений, однако с точки зрения пользователей интерес представляют те, что приведены ниже.
Представление arenadata_toolkit.adb_skew_coefficients
отображает информацию о наличии "перекосов" (skew) в распределении данных, полученную путем расчета коэффициента вариации (Coefficient of Variation, CV). В отличие от взятого за основу представления Greenplum gp_skew_coefficients
, adb_skew_coefficients
учитывает физический размер файлов данных таблиц, а не количество их строк, что является более быстрым и точным подходом.
Столбец | Описание |
---|---|
skcoid |
Внутренний идентификатор таблицы (OID) |
skcnamespace |
Название схемы, в которой размещена таблица |
skcrelname |
Название таблицы |
skccoeff |
Коэффициент вариации (Coefficient of Variation, CV) распределения табличных данных между сегментами, рассчитанный как отношение среднеквадратичного отклонения |
Представление arenadata_toolkit.adb_hba_file_rules_view
отображает краткое содержимое конфигурационного файла pg_hba.conf, используемого для настройки клиентской аутентификации. Каждая строка представления соответствует каждой непустой незакомментированной строке файла pg_hba.conf и содержит информацию о том, может ли правило, описанное в этой строке файла, быть успешно применено.
Представление может быть полезно для проверки того, будут ли применены запланированные изменения в файле pg_hba.conf, и для диагностики возникших ошибок.
Столбец | Описание |
---|---|
line_number |
Номер строки с текущим правилом в файле pg_hba.conf |
type |
Тип соединения. Возможные значения:
|
database |
Список баз данных, к которым применяется правило |
user_name |
Список пользователей и ролей, к которым применяется правило |
address |
Имя/IP-адрес хоста либо одно из следующих значений: |
netmask |
Маска IP-адреса либо |
auth_method |
Метод аутентификации |
options |
Опции, определенные для метода аутентификации (при наличии) |
error |
Сообщение об ошибке, возникшей при попытке обработки правила. При отсутствии ошибок — |
Представление arenadata_toolkit.__db_files_current
позволяет получить ту же информацию, которая регулярно записывается в таблицу db_files_current, но по состоянию на текущий момент — не дожидаясь очередного запуска соответствующего скрипта. Столбцы представления идентичны столбцам таблицы за исключением одного, приведенного ниже.
Столбец | Описание |
---|---|
changed_dttm |
Время последнего изменения файла с данными, возвращаемое системной командой |
Представление arenadata_toolkit.__db_files_current_unmapped
выводит информацию о таких файлах БД на всех сегментах кластера, для которых на текущий момент невозможно установить связь с таблицами, индексами и другими объектами БД. То есть это файлы, для которых при автоматическом заполнении таблицы db_files_current остаются незаполненными (NULL
) такие поля, как oid
, table_name
, table_schema
и т.д.
Однако необходимо учитывать, что представление __db_files_current_unmapped
может показывать файлы, временно оставшиеся без связи. Например, файлы данных таблиц, созданных в транзакции, но еще не закоммиченных. Либо файлы удаленных таблиц, для которых еще не был выполнен CHECKPOINT
(после чего такие файлы будут удалены).
Назначение всех столбцов представления можно посмотреть в описании таблицы db_files_current.
Скрипты для обслуживания кластера
Обзор
Скрипты, поставляемые с кластером ADB для его обслуживания, отображаются на вкладке Primary configuration страницы конфигурирования сервиса ADB. Для просмотра списка скриптов необходимо раскрыть узел Crontab → Crontab maintenance scripts в дереве конфигурационных настроек.

ВНИМАНИЕ
Если необходима настройка кастомных скриптов, используйте системный crontab (например, /etc/cron.d/custom_gpadmin) под пользователем, отличным от |
Для запуска скриптов используется планировщик 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 maintenane 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 |
Пример использования кастомной функции для VACUUM
Ниже приведен пример использования кастомной функции, определяющей порядок, в котором должны обрабатываться таблицы пользовательских БД при выполнении операции VACUUM
(см. --vacuum-order
в таблице Аргументы скрипта operation.py):
-
Создайте необходимую функцию, удовлетворяющую следующим условиям:
-
Наличие одного входного параметра типа
text
. При запуске скрипта operation.py в качестве этого параметра всегда передается значениеVACUUM
. В теле функции он может не использоваться. -
Функция должна возвращать набор строк со столбцами
table_schema
(имя схемы БД) иtable_name
(имя таблицы БД). Это отсортированный перечень таблиц БД, к которым следует применить операциюVACUUM
.
Например, приведенная ниже функция сортирует таблицы по имени схемы, а затем по имени самой таблицы в алфавитном порядке.
CREATE OR REPLACE FUNCTION public.adb_vacuum_strategy_custom(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 LEFT JOIN pg_catalog.pg_partition_rule ON parchildrelid = c.oid WHERE relkind = 'r' AND relstorage != 'x' AND parchildrelid IS NULL AND nspname NOT IN (SELECT schema_name FROM arenadata_toolkit.operation_exclude) ORDER BY nspname, relname; $$ EXECUTE ON MASTER;
ВНИМАНИЕФункцию необходимо добавить во все пользовательские БД, к которым будет применяться операция
VACUUM
, т.е. во все БД за исключением системных (template0
,template1
,postgres
,gpperfmon
) и тех, что опционально могут быть указаны в аргументе --excludedb скрипта operation.py. -
-
Убедитесь в работоспособности функции:
SELECT * FROM public.adb_vacuum_strategy_custom('VACUUM');
Результат:
table_schema | table_name -------------------+------------------- arenadata_toolkit | daily_operation arenadata_toolkit | db_files_current arenadata_toolkit | db_files_history arenadata_toolkit | operation_exclude diskquota | quota_config diskquota | state diskquota | table_size diskquota | target kadb | offsets madlib | migrationhistory public | spatial_ref_sys public | test public | test2 public | test3 (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/). В названии лога фиксируется дата и время запуска — например, 2024-01-24_10:05:01.172592.log.
Убедитесь, что порядок обработки таблиц соответствует тому, что определен в кастомной функции. Для этого просмотрите записи лога с пометкой
DO
, означающие запуск командыVACUUM
для соответствующих таблиц.Обратите внимание, что порядок событий с одинаковой временной отметкой в логе может отличаться от фактического. В этом случае обратите внимание на идентификаторы процессов-обработчиков
PoolWorker
: чем меньше номер, тем раньше начало обработки.Фрагмент лога по операции VACUUM2024-01-24 10:05:02,281: INFO: PoolWorker-1: pid=10232: DO: 'vacuum "arenadata_toolkit"."daily_operation";' for 'adb' 2024-01-24 10:05:02,281: INFO: PoolWorker-2: pid=10233: DO: 'vacuum "arenadata_toolkit"."db_files_current";' for 'adb' 2024-01-24 10:05:02,281: INFO: PoolWorker-3: pid=10234: DO: 'vacuum "arenadata_toolkit"."db_files_history";' for 'adb' 2024-01-24 10:05:02,281: INFO: PoolWorker-5: pid=10239: DO: 'vacuum "diskquota"."quota_config";' for 'adb' 2024-01-24 10:05:02,282: INFO: PoolWorker-7: pid=10243: DO: 'vacuum "diskquota"."table_size";' for 'adb' 2024-01-24 10:05:02,281: INFO: PoolWorker-4: pid=10236: DO: 'vacuum "arenadata_toolkit"."operation_exclude";' for 'adb' 2024-01-24 10:05:02,282: INFO: PoolWorker-6: pid=10241: DO: 'vacuum "diskquota"."state";' for 'adb' 2024-01-24 10:05:02,283: INFO: PoolWorker-8: pid=10245: DO: 'vacuum "diskquota"."target";' for 'adb' 2024-01-24 10:05:02,284: INFO: PoolWorker-9: pid=10247: DO: 'vacuum "kadb"."offsets";' for 'adb' 2024-01-24 10:05:02,285: INFO: PoolWorker-10: pid=10249: DO: 'vacuum "madlib"."migrationhistory";' for 'adb' 2024-01-24 10:05:02,341: INFO: PoolWorker-5: pid=10239: DONE: 'vacuum "diskquota"."quota_config";' for 'adb' 2024-01-24 10:05:02,347: INFO: PoolWorker-10: pid=10249: DONE: 'vacuum "madlib"."migrationhistory";' for 'adb' 2024-01-24 10:05:02,347: INFO: PoolWorker-2: pid=10233: DONE: 'vacuum "arenadata_toolkit"."db_files_current";' for 'adb' 2024-01-24 10:05:02,350: INFO: PoolWorker-8: pid=10245: DONE: 'vacuum "diskquota"."target";' for 'adb' 2024-01-24 10:05:02,351: INFO: PoolWorker-6: pid=10241: DONE: 'vacuum "diskquota"."state";' for 'adb' 2024-01-24 10:05:02,352: INFO: PoolWorker-7: pid=10243: DONE: 'vacuum "diskquota"."table_size";' for 'adb' 2024-01-24 10:05:02,353: INFO: PoolWorker-9: pid=10247: DONE: 'vacuum "kadb"."offsets";' for 'adb' 2024-01-24 10:05:02,513: INFO: PoolWorker-5: pid=10239: DO: 'vacuum "public"."spatial_ref_sys";' for 'adb' 2024-01-24 10:05:02,546: INFO: PoolWorker-5: pid=10239: DONE: 'vacuum "public"."spatial_ref_sys";' for 'adb' 2024-01-24 10:05:02,607: INFO: PoolWorker-7: pid=10243: DO: 'vacuum "public"."test";' for 'adb' 2024-01-24 10:05:02,633: INFO: PoolWorker-4: pid=10236: DONE: 'vacuum "arenadata_toolkit"."operation_exclude";' for 'adb' 2024-01-24 10:05:02,647: INFO: PoolWorker-7: pid=10243: DONE: 'vacuum "public"."test";' for 'adb' 2024-01-24 10:05:02,692: INFO: PoolWorker-9: pid=10247: DO: 'vacuum "public"."test2";' for 'adb' 2024-01-24 10:05:02,692: INFO: PoolWorker-10: pid=10249: DO: 'vacuum "public"."test3";' for 'adb' 2024-01-24 10:05:02,967: INFO: PoolWorker-9: pid=10247: DONE: 'vacuum "public"."test2";' for 'adb' 2024-01-24 10:05:02,972: INFO: PoolWorker-10: pid=10249: DONE: 'vacuum "public"."test3";' for 'adb' 2024-01-24 10:05:03,054: INFO: PoolWorker-3: pid=10234: DONE: 'vacuum "arenadata_toolkit"."db_files_history";' for 'adb' 2024-01-24 10:05:03,202: INFO: PoolWorker-1: pid=10232: DONE: 'vacuum "arenadata_toolkit"."daily_operation";' 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
не будет применяться к БД, при обработке которых зафиксированы ошибки. -