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

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

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

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

Параметр Где Default Описание
KLVD_INDEXER_WORKERS ENV (docker-compose) 4 Параллельных потоков извлечения текста вложений (Solr Cell /update/extract). Каждый поток имеет собственный CURL* с keep-alive.
index_batch_size config.settings (WUI → Общие настройки) 100 Писем за один SELECT + один batch HTTP /update в Solr. Больше = меньше round-trips, но больше память на один запрос. Max 1000.
SOLR_HEAP ENV (docker-compose) 4096m JVM heap(!) Solr. Увеличивать, если backlog растёт и Solr CPU-bound (merges не успевают).
autoSoftCommit ENV SOLR_OPTS 10с Как быстро документы становятся видимыми в поиске. Меньше = быстрее видно, но больше CPU на searcher reopen.
ramBufferSizeMB solrconfig.xml (пересборка klvd-solr) 512 RAM-буфер перед flush сегмента на диск. Больше = меньше сегментов, меньше merge storm.
mergeFactor solrconfig.xml (пересборка klvd-solr) 25 Сколько сегментов merge за раз. Больше = меньше merge-операций под batch-нагрузкой.

Рекомендации по vCPU

vCPU KLVD_INDEXER_WORKERS SOLR_HEAP Примечание
4 2 2048m Минимальная конфигурация
8 4 4096m Рекомендуемая для production
16+ 8 8192m Высокая нагрузка, много вложений

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

trade-off autoSoftCommit

  • Меньше (1-3с) — документы появляются в поиске быстрее, но searcher reopen каждые 1-3с нагружает CPU Solr. Подходит для интерактивного поиска с малым потоком импорта.
  • Больше (10-15с) — меньше CPU на reopen, выше throughput индексации. Документы появляются в поиске с задержкой до 15с. Подходит для массового импорта (бенчмарк, начальная загрузка архива).
  • При crash Solr — документы в updateLog (не закоммиченные) восстанавливаются при старте Solr. time_indexed=0 в PG гарантирует переиндексацию если что-то потерялось. Данные не теряются.

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

  • Backlog индексатора растёт, но KLVD_INDEXER_WORKERS уже = vCPU → Solr CPU-bound.
  • В логах Solr частые merged segment (merge storm) → heap(!) не хватает на ramBufferSizeMB.
  • curl http://<solr>:8983/solr/admin/cores?action=STATUS → memory близко к SOLR_HEAP → увеличить heap(!) или уменьшить ramBufferSizeMB.

reindex(!)-all после изменения solrconfig.xml

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

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

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