Перейти к основному контенту

Настройка производительности индексирования

Индексирование выполняется отдельной задачей archive.search.index. Импортёр сохраняет письмо и устанавливает time_archived, после чего индексатор выбирает записи с time_indexed=0 и отправляет их в Solr. Если индексатор обрабатывает письма медленнее, чем они поступают, очередь растёт и новые письма появляются в поиске с задержкой.

Параметры настройки

Параметр Где задаётся По умолчанию Назначение
KLVD_INDEXER_WORKERS переменная окружения Docker Compose 4 число параллельных потоков извлечения текста вложений через Solr Cell /update/extract. Каждый поток использует отдельное соединение curl с keep-alive (!)
index_batch_size config.settings, [Общие настройки] 100 число писем, выбираемых одним SELECT и отправляемых одним пакетным HTTP-запросом /update в Solr. Увеличение снижает число запросов, но повышает потребление памяти. Максимум — 1000
SOLR_HEAP переменная окружения Docker Compose 4096m размер памяти JVM Solr. Увеличение может потребоваться, если очередь индексирования растёт и Solr ограничен производительностью CPU во время слияния сегментов
autoSoftCommit SOLR_OPTS 10с задержка до появления новых документов в результатах поиска. Меньшее значение сокращает задержку, но чаще переоткрывает поисковый индекс и повышает нагрузку на CPU
ramBufferSizeMB solrconfig.xml, требуется пересборка klvd-solr 512 размер буфера в памяти до записи сегмента на диск. Увеличение уменьшает число сегментов и операций их слияния
mergeFactor solrconfig.xml, требуется пересборка klvd-solr 25 число сегментов, объединяемых за одну операцию. Увеличение уменьшает число операций слияния при пакетной индексации

Рекомендации по числу vCPU

vCPU KLVD_INDEXER_WORKERS SOLR_HEAP Применение
4 2 2048m минимальная конфигурация
8 4 4096m рекомендуемая конфигурация для рабочей эксплуатации
16+ 8 8192m высокая нагрузка и большое количество вложений

KLVD_INDEXER_WORKERS не должен превышать число vCPU. Каждый рабочий поток выполняет HTTP-запросы к Solr и создаёт нагрузку как на узел Клавдия, так и на Solr.

Выбор autoSoftCommit

  • 1–3 с — новые документы быстрее появляются в поиске, но Solr чаще переоткрывает поисковый индекс и сильнее нагружает CPU. Подходит для небольшого потока импорта, когда важна минимальная задержка поиска.
  • 10–15 с — снижает нагрузку на CPU и повышает пропускную способность индексирования, но новые документы могут появляться в поиске с задержкой до 15 секунд. Подходит для массового импорта и начальной загрузки архива.
  • При аварийном завершении Solr документы, находившиеся в updateLog, восстанавливаются после запуска. Записи с time_indexed=0 в PostgreSQL остаются в очереди и будут проиндексированы повторно, если часть данных не попала в индекс.

Когда увеличивать SOLR_HEAP

Рассмотрите увеличение SOLR_HEAP, если выполняются следующие условия:

  • очередь индексирования растёт, а KLVD_INDEXER_WORKERS уже соответствует числу vCPU;
  • в журнале Solr часто фиксируется слияние сегментов и текущего объёма памяти недостаточно для ramBufferSizeMB;
  • колонка [JVM Heap] (!) в [Инстансы SolrCloud] или /solr/admin/info/system показывает устойчивую нехватку памяти и длительные паузы сборки мусора.

Если увеличение памяти невозможно, уменьшите ramBufferSizeMB и повторно оцените производительность.

Применение изменений solrconfig.xml ко всему индексу

[Сбросить поиск] удаляет поисковый индекс. Перед сбросом проверьте доступность исходных данных архива и согласуйте период недоступности полнотекстового поиска. Для одного изменения SOLR_HEAP сброс и переиндексация не требуются.

Изменения mergeFactor и ramBufferSizeMB применяются к новым сегментам. Существующий индекс автоматически не перестраивается.

Чтобы применить новые параметры ко всему индексу:

  1. Измените solrconfig.xml и пересоберите образ klvd-solr.
  2. В разделе [Поиск (Solr)] выполните [Сбросить поиск].
  3. Выполните [Реиндексировать ВСЁ].

После переиндексации все сегменты будут созданы с новой конфигурацией.

Связанные материалы

  • {{ССЫЛКА:maintenance.solr-tuning|Solr: эксплуатационная настройка}} — память JVM и граница 31 ГБ

Навигация по книге

  • Следующая статья: {{ССЫЛКА:maintenance.solr-tuning|Solr: эксплуатационная настройка}}