Операция переиндексации (reindexDataJob)
Операция переиндексации данных предназначена для запуска индексации поисковой системы при значимых изменениях в структуре записей или при добавлении новых данных. Индексированные данные ускоряют поиск и отображаются в интерфейсе пользователя.
Операция запускает процесс индексации Openearch при значимых изменениях в структуре записей с целью ускорения поиска.
По условиям лицензирования у операции reindexDataJob может быть отключена многопоточность. В таком случае операция будет запускаться только на одном узле кластера.
Параметры операции
Имя пользователя – логин учетной записи (рекомендуется к заполнению). Определяет, с правами какой учетной записи будет запускаться операция. Если поле пустое, то:
Операция выполняется от имени пользователя, фактически запустившего операцию, но если при запущенной без указания пользователя операции произошел выход из системы (случайный или принудительный при потере соединения), то операция завершится с ошибкой.
При запуске по Cron-выражению у операции будут полные права на любой тип актива/справочник; при запуске через интерфейс у операции будут права текущей учетной записи. Для учетной записи оператора данных может понадобиться настроить права на тип активы/справочники.
ID Операции - идентификатор операции.
Размер блока – размер блока загружаемых данных, по умолчанию = 1024.
Секция "Индексация активов":
Проиндексировать черновики – флаг переиндексации черновиков;
Проиндексировать связи – флаг переиндексации связей;
Проиндексировать активы – флаг переиндексации данных активов;
Писать лог ошибок - при включении флага записи с ошибками будут записываться в таблицы postgres (обязательно указание ID операции);
Обработать лог ошибок - при включении флага и повторном запуске операции с тем же ID операции данные из таблиц postgres будут повторно переиндексированы;
Допускается запуск операции с одновременно включенными флагами "Писать лог ошибок" и "Обработать лог ошибок". В этом случае при повторной переиндексации данных из лога данные с ошибками снова запишутся в лог.
Механизм повторной переиндексации не работает для черновиков.
Не создавать стандартный отчет - флаг отвечает за создание стандартного отчета в уведомлениях о количестве переиндексированных активов после завершения операции;
Обновить маппинги – параметр, обновляющий маппинги в Opensearch;
Очищать индексы – параметр, очищающий индексы Opensearch, а также индексы результатов запусков сканеров;
Секция "Индексация бизнес-процессов":
Проиндексировать данные бизнес-процессов — флаг переиндексации бизнес-процессов, а также активных и завершенных задач, переменных, комментариев и вложений.
Проиндексировать бизнес-процессы — позволяет выбрать бизнес-процессы, данные которых будут переиндексированы. Параметр активен, если включен флаг "Проиндексировать данные бизнес-процессов".
Секция "Метки данных":
Проиндексировать метки данных - флаг переиндексации меток данных.
Очистить индекс - параметр, очищающий индексы меток данных.
Секция "Индексация черновиков":
Проиндексировать черновики – параметр, обновляющий информацию обо всех черновиках активов.
Секция "Индексация модели справочников":
Проиндексировать модель справочников - флаг переиндексации модели справочников.
Секция "Индексация справочников":
Проиндексировать данные - флаг переиндексации данных справочников.
Проиндексировать черновики – параметр, обновляющий информацию обо всех черновиках справочников.
Проиндексировать объекты модели – справочники, для которых будет выполнена переиндексация (доступен выбор нескольких). По умолчанию установлено значение "Все справочники".
Фоновая переиндексация - флаг, позволяющий запускать операцию в фоновом режиме.
Не создавать стандартный отчет – параметр отвечает за создание стандартного отчета в уведомлениях о количестве переиндексированных справочников после завершения операции.
Писать лог ошибок – параметр, записывающий ошибки в лог.
Обработать лог ошибок – параметр, определяющий, будут ли браться данные из лога ошибок.
Продолжать при ошибках? - флаг, при включении которого продолжается запуск блока даже в случае возникновения ошибок.
Когда применяется
Операция запускается в случаях:
Если производились значимые изменения модели данных, записях, классификации, таблицы сопоставления и т.д.
При изменении хотя бы одного свойства у атрибута: "Поисковый", "Отображаемый", "Главный отображаемый", "Уникальный";
При редактировании кодового или альтернативного кодового атрибута;
При настройке потоков выполнения;
При переходе на OpenSearch с потерей данных с помощью docker или вручную.
Если есть сомнения в актуальности данных в индексе. Например, не отображается часть записей.
Если было загружено много данных, и они не отображаются.
Если индекс данных был очищен вручную.
Периодичность запуска определяется администратором системы с учетом рабочих задач по обслуживанию Юниверс DG.
Лог ошибок
Писать/Обработать лог ошибок сохраняет в БД информацию о записях, не попавших в индекс, чтобы при дальнейшем запуске была возможность дообработать только неудачно завершившуюся часть, что существенно экономит время на полную переиндексацию большого количества записей.
Параметры используются в случае, когда происходит прерывание очереди индексации Opensearch и завершение индексирующих запросов с ошибкой EsRejectedExecutionException. Во всех остальных случаях параметры должны быть отключены.
Если необходимо переиндексировать большие данные:
Сначала запускается операция с Писать лог ошибок.
Далее, если остаются неиндексированные данные, то запускается операция повторно, выключив Писать лог ошибок и включив Обработать лог ошибок.
Также при больших данных можно отключать параметры Очищать индексы и Обновить маппинги.
Механизм работы параметра "Размер блока" (blockSize)
Все количество обрабатываемых записей делится на части по blockSize записей.
Затем в каждой части обрабатывается одним тредом по org.unidata.mdm.job.reindex.data.commit.interval
записей (в памяти держится информация по этому количеству записей, при переходе к следующим записям память очищается), пока не кончатся записи.
Параметр org.unidata.mdm.job.reindex.data.commit.interval
, как правило, не нуждается в редактировании. Рекомендуемого значения 1000 достаточно для большинства задач. Чем больше этот параметр, тем больше памяти может быть занято в один момент времени. Если этот параметр больше, чем blockSize, то фактически этот параметр будет равен blockSize.
org.unidata.mdm.job.reindex.data.reindex.threads
- количество одновременно обрабатываемых тредов.
Параметры org.unidata.mdm.job.reindex.data.commit.interval
и org.unidata.mdm.job.reindex.data.reindex.threads
задаются в backend.properties.
Таким образом, следует выбирать org.unidata.mdm.job.reindex.data.reindex.threads
по количеству логических ядер процессора (использовать равное или меньшее число, в зависимости от наличия другой нагрузки на процессор).
При указании небольшого blockSize легче отслеживать прогресс операции через UI (менеджер запусков > выбрать запуск > количество выполненных шагов).
Также blockSize необходимо выбирать в соответствии с общим количеством данных чтобы количество партиций не было слишком большим. На таких больших данных, как в справочнике с адресами, оптимальным вариантом является 500-2000 партиций.
Обработка данных происходит последовательно: активы > связи > справочники > бизнес-процессы. Сначала завершается обработка одного типа данных, затем происходит переход к другому. Обрабатываются те типы данных, которые есть в наличии.
Фоновая переиндексация
Стандартные имена индексов являются псевдонимами. Система сохраняет состояние присвоения между перезапусками, это позволяет держать несколько реальных индексов, относящихся к одному и тому же псевдониму, и дает возможность переиндексировать данные без очистки текущих индексов, т.е. не останавливать работу на время переиндексации и работать в фоновом режиме.
Индексация в фоновые индексы создает специальный объект переиндексации на кластере, который содержит ссылки на реальные индексы, созданные для будущей привязки к псевдонимам. Код индекс-компоненты сделан таким образом, что, если при вводе есть ID процесса фоновой переиндексации, то запрос перенаправляется в фоновый индекс, контролируемый процессом с таким ID. Это дает возможность принимать обновления в существующие индексы, не прерывая работу пользователей.
В текущей реализации не поддерживается фоновая переиндексация модели данных, которая индексируются по старой схеме.
Индексация записей и их связей происходит автоматически. В случае переиндексации отдельного типа актива его связи индексируются только с левой стороны. Чтобы переиндексировать обе стороны, необходимо также переиндексировать связанный тип актива.
Системные параметры, влияющие на процесс фоновой переиндексации:
org.unidata.mdm.search.switch.await.timeout
- Максимальное время ожидания переключения индекса задвижкой, значение по умолчанию = 60000 миллисекунд;org.unidata.mdm.search.background.id.lock.timeout
- Время ожидания при захвате идентификатора фонового процесса переиндексации, значение по умолчанию = 20000 миллисекунд;org.unidata.mdm.search.background.orphan.expiration.interval
- Время жизни заброшенных фоновых процессов переиндексации, значение по умолчанию = сутки.