Настройка производительности индексирования
Индексирование выполняется отдельной задачей 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 применяются к новым сегментам. Существующий индекс автоматически не перестраивается.
Чтобы применить новые параметры ко всему индексу:
- Измените
solrconfig.xmlи пересоберите образklvd-solr. - В разделе [Поиск (Solr)] выполните [Сбросить поиск].
- Выполните [Реиндексировать ВСЁ].
После переиндексации все сегменты будут созданы с новой конфигурацией.
Связанные материалы
- Solr: эксплуатационная настройка — память JVM и граница 31 ГБ
Навигация по книге
- Следующая статья: Solr: эксплуатационная настройка