Настройка расписания отложенного создания индексов
«Эллес» реализует поддержку отложенного создания индексов при изменении схемы каталога, что позволяет избежать деградации производительности в окружениях с большим количеством объектов.
Отложенная индексация и поведение поиска
При установке флага fDisableAutoIndexingOnSchemaUpdate (19-й символ в строке) атрибута dSHeuristics объекта CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration в ненулевое значение индексы для новых атрибутов не создаются автоматически, а обрабатываются в фоновом режиме через сервис mt в составе «Эллес».
Сервис mt обеспечивает периодическое сравнение состава индексируемых атрибутов в схеме и в атрибуте @INDEXLIST, а также выполнение необходимых операций по созданию или удалению индексов.
В этом случае:
-
новые атрибуты, добавленные в Partial Attribute Set (PAS), не получают индексов автоматически;
-
поисковые запросы по таким атрибутам выполняются через полный просмотр данных;
-
при выполнении неиндексированного запроса в лог записывается предупреждение с указанием атрибута;
-
индекс может быть создан вручную через принудительный запуск сервиса
mtили по расписанию; -
индексы, отключенные по причине возникновения ошибки (для которых создан файл-флаг с постфиксом
.disabled), удаляются при перезапуске контроллера домена и восстанавливаются в фоновом режиме при следующем запуске обслуживания.
Фоновая работа с индексами не выполняется в тестовой среде и при использовании базы данных TDB.
При наличии отложенных изменений индексов сервис mt регистрирует события 2944 и 2945 в логах контроллера домена. Эти события служат для информирования администратора о состоянии отложенных индексов и необходимости их обработки.
|
Управление атрибутом dSHeuristics с помощью samba-tool
Значение атрибута dSHeuristics можно просматривать и изменять с помощью подкоманды samba-tool forest directory_service.
Пример включения отложенной индексации (установка 19-го бита в 1):
samba-tool forest directory_service dsheuristics 0000000001000000001 -H ldap://dc1.example.com -U Administrator
При указании строки для атрибута dSHeuristics недостающие символы автоматически заполняются нулями. 19-й символ управляет флагом fDisableAutoIndexingOnSchemaUpdate:
-
0— автоматическая индексация включена (по умолчанию); -
1— отложенная индексация включена.
Для просмотра текущего значения выполните:
samba-tool forest directory_service show Settings for CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=example,DC=com dsheuristics: 0000000001000000001
Настройка периодичности запуска обслуживания индексов
Поведение сервиса mt при управлении индексным обслуживанием зависит от значения параметра index:maintenance schedule в конфигурации «Эллес» в файле smb.conf и состояния флага fDisableAutoIndexingOnSchemaUpdate в атрибуте dSHeuristics:
| index:maintenance schedule | fDisableAutoIndexingOnSchemaUpdate | Поведение |
|---|---|---|
Не влияет |
|
Обслуживание индексов не запускается. Автоматическая индексация при изменении схемы включена |
Не задан (или пустое значение) |
|
Обслуживание индексов не запускается автоматически. Индексы остаются несозданными до ручного запуска |
Задан (cron-выражение) |
|
Обслуживание индексов регулярно запускается по расписанию для создания отложенных индексов |
Значением параметра index:maintenance schedule может быть строка, содержащая корректное cron-выражение в формате <минута> <час> <день месяца> <месяц> <день недели>.
Для изменения значения параметра явно задайте его в файле smb.conf.
Например:
[global]
...
index:maintenance schedule = 0 3 * * 0
...
Этот пример запускает обслуживание индексов каждое воскресенье в 03:00 ночи.
Принудительный запуск обслуживания индексов
Чтобы запустить сервис mt принудительно, достаточно создать специальный атрибут runMTService в корне дерева данных каталога (объект rootDSE).
Для этого выполните следующие действия от имени учетной записи с правами на внесение изменений в БД LDAP домена:
-
Сформируйте ldif-файл для создания атрибута
runMTServiceсо значением, соответствующим задаче (256— обслуживание индексов), в корне дерева.
Например:cat /tmp/run_mt_service.ldif dn: changetype: modify add: runMTService runMTService: 256
-
Внесите изменения, например, с помощью утилиты
ldbmodify(полный путь к утилите после установки пакета inno-samba — /app/inno-samba/bin/ldbmodify):ldbmodify -H ldap://dc1 -U Administrator /tmp/run_mt_service.ldif ... Modified 1 records successfully
После принудительного запуска расписание периодического запуска сервиса mt корректируется соответствующим образом: следующий запуск произойдет через заданный в конфигурации интервал относительно момента принудительного запуска.
Логирование событий
События 2944 и 2945 регистрируются в логах «Эллес» при общем уровне логирования 5 или выше.
Пример настройки логирования в smb.conf:
log level = 5
Событие 2944 сопровождается сообщением:
-
исходный текст:
EventId 2944: Any index changes that are associated with a schema change are being deferred.
-
перевод:
EventId 2944: Все изменения индексов, связанные с изменением схемы, откладываются.
Событие 2945 сопровождается сообщением:
-
исходный текст:
EventId 2945: Index changes associated with a previous schema change are still pending. This is because the forest-wide ds-heuristic flag fDisableAutoIndexingOnSchemaUpdate is set. This flag, when set, disables automatic indexing of existing attributes on schema update. To ensure optimal performance from this DC, force an index creation by performing a rootDSE attribute modification on schemaUpdateNow and set it to 1. This behavior can also be turned off by resetting dsHeuristic fDisableAutoIndexingOnSchemaUpdate to 0, then DCs will automatically rebuild indices as they receive this change.
-
перевод:
EventId 2945: Изменения индексов, связанные с предыдущим изменением схемы, все еще ожидают обработки. Это происходит потому, что флаг fDisableAutoIndexingOnSchemaUpdate установлен в ds-heuristic на уровне леса. При установке этого флага автоматическое создание индексов для существующих атрибутов при обновлении схемы отключено. Для обеспечения оптимальной производительности этого контроллера домена принудительно создайте индексы, изменив атрибут schemaUpdateNow в rootDSE на значение 1. Это поведение можно отключить, сбросив флаг dsHeuristic fDisableAutoIndexingOnSchemaUpdate в 0 — тогда контроллеры домена автоматически перестроят индексы при получении изменений схемы.
Обновлено: