Медленный поиск может стать узким местом и привести к образованию очереди ожидания.
Существует несколько возможных причин медленного поиска на отдельных узлах:
- Ваше приложение неправильно распределяет нагрузку между всеми узлами данных.
- Операции поиска и/или индексирования сосредоточены на определенных узлах из-за способа распределения шардов.
- Запросы, выполняемые по определенным индексам (сконцентрированным на данных узлах), работают медленно и нуждаются в оптимизации.
- На рассматриваемых узлах выполняются другие процессы (например, слияние или моментальные снимки), которые используют ресурсы медленных узлов.
Как решить проблему
Просмотрите данные мониторинга, чтобы определить, какие индексы получают больше всего операций поиска/индексирования. Часто можно увидеть, что определенные узлы имеют высокую загрузку процессора, и что на этих узлах существуют определенные "горячие" индексные шарды. Например, представьте следующий сценарий:
- Индекс A имеет высокую частоту поиска,
- Индекс A имеет шарды только на узле 3 и 4
- Узлы 3 и 4 используют больше процессоров, чем другие узлы данных.
Индекс A является сильным кандидатом на то, чтобы быть одной из причин проблемы.
Проверьте, есть ли у вас какие-либо из описанных проблем с загруженными узлами данных.
Активируйте журнала медленных запросов
Если у вас активирована функция медленного протоколирования, посмотрите, какие журналы занимают больше всего времени. В частности, обратите внимание на агрегации с большими значениями "size" или вложенные запросы, которые чаще всего являются виновниками медленных запросов.
Чтобы активировать протоколирование медленных запросов для определенного индекса, можно выполнить следующую команду.
1 2 3 4 5 6 | PUT /my-index/_settings { "index.search.slowlog.threshold.query.warn": "10s", "index.search.slowlog.threshold.query.info": "5s", "index.search.slowlog.level": "info" } |
Для экономии ресурсов лучше всего отключить медленное протоколирование, если вы закончили использовать значение -1.
1 2 3 4 5 6 | PUT /my-index/_settings { "index.search.slowlog.threshold.query.warn": "-1", "index.search.slowlog.threshold.query.info": "-1", "index.search.slowlog.level": "info" } |
После активации регистрации медленных запросов вы сможете увидеть запросы, которые занимают много времени. Ищите проблемы, упомянутые в статье 10 важных советов по улучшению поиска в OpenSearch.