4.1 База данных FLAIM

Можно утверждать, что размер кэша — это наиболее важный фактор, который влияет на общую производительность eDirectory. Чем больше элементов (блоков и записей), которые можно поместить в кэш, тем выше общая производительность. Процентная доля случаев, когда блоки или элементы были найдены в кэше, называется коэффициентом попадания (в кэш). Чем выше этот коэффициент, тем выше производительность. Для просмотра коэффициента попадания можно использовать iMonitor.

Кэш блоков наиболее полезен для операций обновления. Кэш элементов наиболее полезен для операций поиска в пределах основания для элемента. Однако для операций поиска в пределах одного уровня и поддерева наряду с кэшем блоков используется кэш записей. Кэш блоков используется для извлечения индексов. При необходимости создайте нужный вам тип индексов. Дополнительную информацию см. в разделе Выбор индексов.

Сбой в кэше блоков может привести к выполнению операции чтения с диска. Операции чтения с диска всегда дорогостоящи, однако их можно избежать, если блоки извлекаются из кэша файловой системы.

Объем памяти, необходимый для кэширования всей базы данных в кэше блоков, приблизительно равен размеру базы данных на диске. Объем памяти, необходимый для кэширования всей базы данных в кэше элементов, больше размера базы данных на диске примерно в 2-4 раза. Если в системе меньше памяти, попробуйте уменьшить размер кэша элементов и существенно увеличить размер блока или кэша файловой системы.

Если операции чтения расположены в наборе элементов в каталоге, необходимо повысить размер кэша элементов, поскольку это приведет к повышению коэффициента попадания в кэш элементов.

Если шаблон чтения полностью случаен и размер DIB существенно больше доступного объема ОЗУ, необходимо, чтобы размер кэша блоков или кэша файловой системы превышал размер кэша записей.

Любой метод, используемый для настройки eDirectory с целью повысить производительность, необходимо эмпирически протестировать. Удачное отношение размера кэша элементов и блоков для сред, в которых часто выполняются операции поиска, составляет 2:1. Убедитесь в том, что для других процессов осталось достаточно памяти. Избегайте подкачки страниц, даже если последняя позволяет сократить размеры кэша FLAIM.

Поскольку FLAIM обеспечивает предварительно выделенное кэширование, память, выделенная кэшу eDirectory, никогда не фрагментируется «родным» менеджером памяти операционной системы.

4.1.1 Выбор индексов

Индексы повышают производительность поиска в пределах одного уровня или поддерева. Для поиска в динамических группах также используются операции поиска в пределах одного уровня или поддерева. Индексы не используются для поисков в пределах основания.

Поскольку в индексе типа «Наличие» нет различий между присутствующими и отсутствующими (удаленными) значениями, то в основном он используется для внутренних целей. Если приложение выполняет поисковый запрос типа «Наличие», этот индекс вообще не используется. Поэтому для приложений не нужно создавать индексы типа «Наличие».

Приложения могут создавать индекс типа «Значение» для атрибута. Этого индекса будет достаточно для большинства операций поиска. FLAIM может использовать индекс типа «Значение» для выполнения операций поиска типа «Наличие» и «Подстрока» в атрибутах.

Индекс «Подстрока» может существенно замедлить обновления, выполняемые с атрибутом. Количество индексных блоков, необходимых для поддержки индекса типа «Подстрока», слишком велико по сравнению с индексом типа «Значение». Это означает, что для их кэширования необходимо больше кэша блока. Индекс «Подстрока» следует создавать только при необходимости. Индекса типа «Значение» будет вполне достаточно для большинства поисков. Однако, если поиски типа «Подстрока» не обеспечивают приемлемую производительность с индексом типа «Значение», можно создать индекс типа «Подстрока» для этих атрибутов.

Если для выполнения операции поиска требуется длительное время несмотря на выбранный индекс, можно ввести новый индекс значений для одного из атрибутов фильтра поиска. Выберите атрибут, который дает наилучшие результаты при индексировании.

4.1.2 Настройка обновлений

Кэш блоков наиболее полезен для операций обновления. Индексы также располагаются в кэше блоков. Хотя индексы и помогают быстрее выполнить операции поиска, но если их много, то их поддержка может привести к излишней нагрузке на сервер. При изменении, добавлении или удалении значений атрибута изменяются и индексы. Для ускорения передачи при выполнении больших операций передачи индексы можно отключить.

Если каталоги RFL и DIB находятся на разных дисках, производительность будет выше.

Приемлемым лимитом в отношении времени ответа для операции обновления можно управлять при помощи параметра maxdirtycache. Например, если приемлемый лимит для ответа сервера составляет 5 секунд и случайная скорость записи диска составляет 20 МБ в секунду, то параметру maxdirtycache нужно задать значение 20x5 = 100 МБ. Убедитесь в том, что кэш блоков может хранить в памяти эти «грязные» блоки. См. Раздел 5.2.2, Изменение настроек кэша FLAIM в файле _ndsdb.ini для получения дополнительной информации.