Операция профилирования данных (profiledataJob)
Операция предназначена для глубокого анализа объема и структуры данных, которые хранятся в системе. Она выполняет периодический подсчет статистики, позволяя понять распределение данных по трем ключевым разрезам: объем основных данных записей, количество и объем исходящих связей, а также количество и объем активных классификаций. Результаты помогают администраторам оценивать нагрузку на хранилище, выявлять аномалии (например, записи с чрезмерным количеством связей) и планировать ресурсы.
Параметры операции
Имя пользователя (поле ввода). Определяет, с правами какой учетной записи будет запускаться операция. Если поле пустое, то:
Операция выполняется от имени пользователя, фактически запустившего операцию, но если при запущенной без указания пользователя операции произошел выход из системы (случайный или принудительный при потере соединения), то операция завершится с ошибкой.
При запуске по Cron-выражению у операции будут полные права на любой реестр/справочник; при запуске через интерфейс у операции будут права текущей учетной записи. Для учетной записи оператора данных может понадобиться настроить права на реестры/справочники. Если логин не указан, то операция запуститься от имени пользователя, который ее запустил.
Размер блока (поле ввода). Размер блока загружаемых данных. По умолчанию 1024.
Хранить только последние запуски в количестве (поле ввода). Если указано число N, то детальные таблицы (
profile_data_{operation_id},profile_classifications_{operation_id}) за все, кроме последних N запусков операции, будут автоматически удалены из базы данных.Профилировать объекты модели (выпадающий список). Параметр позволяет выбрать реестры/справочники для которых будет собрана статистика. По умолчанию профилируются все сущности.
Границы профилей в процентах от объема самой тяжелой записи (поле ввода). Список границ для категоризации записей по их удельному весу. Задаются через запятую в процентах (например, 0,25,50,75,100). Система создаст профили: 0-25%, 25-50% и т.д., от объема самой «тяжелой» записи в системе.
Границы профилей по количеству связей (поле ввода). Список границ для категоризации записей по числу исходящих связей. Задаются через запятую (например, 0,5,10,20,50). Будут созданы профили: 0-5 связей, 6-10 связей и т.д.
Границы профилей по количеству классификаций (поле ввода). Список границ для категоризации записей по числу активных классификаций. Задаются через запятую (например, 0,5,10,20,50). Будут созданы соответствующие профили. Если модуль классификаций не включен в сборку, этот подсчет выполняться не будет.
Внутренние механизмы
Операция выполняется в два основных этапа:
Сбор детальных метрик по записям: Система выполняет запросы к основным таблицам БД (
record_etalons,relation,classification), чтобы для каждого эталона записи подсчитать:
Объем данных (в байтах) самой записи.
Количество и общий объем данных всех ее исходящих связей.
Количество и общий объем данных всех ее активных классификаций. Эти детальные данные сохраняются во временные таблицы
profile_data_{operation_id}иprofile_classifications_{operation_id}.
Агрегация метрик по профилям: На основе сохраненных детальных данных и заданных пользователем границ профилей система выполняет агрегирующие запросы. Она группирует записи в соответствующие категории (профили) по объему, количеству связей и классификаций, подсчитывая для каждого профиля итоговые метрики.
Параметры системы
com.universe.mdm.hpe.job.profile.data.threads— определяет количество потоков (тредов) для параллельного выполнения операции. Влияние: Увеличение числа потоков может ускорить выполнение на мощных серверах, но создаст большую нагрузку на БД и CPU. Рекомендуемое значение по умолчанию — 2. Управление распределением задач между потоками и нодами кластера осуществляется через Hazelcast.
Важно знать / Ограничения
Повторный запуск после ошибки: Если операция завершилась с ошибкой, ее повторный запуск начнет сбор статистики заново. Результаты предыдущего неудачного выполнения не будут использованы.
Зависимость от модулей: Сбор статистики по классификациям является опциональным. Если соответствующий функциональный модуль не входит в сборку системы, эта часть метрик рассчитываться не будет.
Хранение детальных данных: Детальные таблицы (
profile_data_{operation_id}) могут занимать значительное место. Рекомендуется использовать параметр "Хранить только последние запуски в количестве" для их автоматической очистки.Производительность: Операция создает значительную нагрузку на базу данных из-за сложных аналитических запросов к большим объемам данных. Рекомендуется запускать ее в периоды минимальной нагрузки на систему, тщательно подбирать объекты для профилирования и настраивать количество потоков.
Рекомендации по настройке и использованию:
Настройте фильтры: В параметре "Профилировать объекты модели" указывайте только те реестры/справочники, которые действительно нужны для анализа. Это сократит время выполнения и нагрузку.
Используйте многопоточность: Для ускорения обработки больших объемов данных настройте количество потоков в файле
backend.propertiesчерез параметрcom.universe.mdm.hpe.job.profile.data.threads. Рекомендуемое значение по умолчанию — 2, его можно увеличить на мощных серверах, соблюдая баланс с нагрузкой на CPU и БД.Следите за производительностью: Запускайте операцию в периоды минимальной нагрузки на систему и следите за потреблением ресурсов (CPU, память, I/O базы данных) во время ее выполнения.
Результаты работы операции
Основным результатом являются две таблицы в схеме БД com_universe_mdm_hpe_job_profile_data:
profile_execution: Фиксирует факт каждого запуска операции.
profile_digest: Содержит агрегированные метрики, привязанные кexecution_id. Для каждого профиля по каждому разрезу (records, relations, classifications) указывается:
indicator_name: Тип объекта (записи, связи, классификации).
from_bound, to_bound: Границы профиля.
items_count: Количество записей, попавших в данный профиль.
volume: Доля (от 0 до 1) от общего объема данных по этому разрезу во всей системе, которую составляют записи этого профиля.
total_size: Абсолютный объем в байтах, который составляют данные этого профиля.
Пример записи в profile_digest и ее интерпретация:
execution_id |
indicator_name |
from_bound |
to_bound |
items_count |
volume |
total_size |
70 |
records |
0 |
25 |
15 |
0.00015 |
6985 |
70 |
relations |
11 |
20 |
112 |
0.10224 |
807520 |
70 |
classifications |
11 |
20 |
16 |
0.03997 |
101152 |
Интерпретация результатов:
Записи (records): 15 записей имеют вес от 0% до 25% от самой "тяжелой" записи в системе. Их совокупный объем составляет 0.015% (0.00015) от общего веса всех записей, что равно 6 985 байтам.
Связи (relations): 112 записей имеют от 11 до 20 исходящих связей. Общий объем данных этих связей составляет 10.224% (0.10224) от веса всех связей в системе, что равно 807 520 байтам.
Классификации (classifications): 16 записей имеют от 11 до 20 активных классификаций. Общий объем данных этих классификаций составляет 3.997% (0.03997) от веса всех классификаций, что равно 101 152 байтам.