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

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

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

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

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

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

vCPUKLVD_INDEXER_WORKERSSOLR_HEAPПримечание
422048mМинимальная конфигурация
844096mРекомендуемая для production
16+88192mВысокая нагрузка, много вложений

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. Запустить «Реиндексировать ВСЁ» — индекс пересоздастся с новыми параметрами.

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

  • Следующая статья: {{ССЫЛКА:maintenance.cluster-status|Проверка состояния узлов}}