Настройка производительности индексирования
Индексатор (задача 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 применяется только к новым сегментам. Существующий индекс не переформируется автоматически. Для применения к всему индексу:
- Изменить
solrconfig.xml, пересобрать образklvd-solr. - Сбросить поиск (раздел [Поиск (Solr)] → «Сбросить поиск»).
- Запустить «Реиндексировать ВСЁ» — индекс пересоздастся с новыми параметрами.
Навигация по книге
- Следующая статья: {{ССЫЛКА:maintenance.cluster-status|Проверка состояния узлов}}