Поисковый запрос для крупных сайтов истекает по времени

Всем привет,

Мы начали регулярно сталкиваться с тайм-аутами при выполнении запроса /search. Проведя бенчмарки по некоторым поисковым запросам, мы обнаружили, что некоторые из них могут выполняться до 2 минут. Мы нашли эту публикацию, но хотели бы узнать, есть ли дополнительные рекомендации по решению этой проблемы. Вот некоторая релевантная информация о нашем конкретном случае:

  • Наш самый крупный сайт (на котором чаще всего возникают тайм-ауты) содержит около 1 700 000 сообщений.
  • Мы используем настройки autovacuum по умолчанию для PostgreSQL. Мы собрали статистику по соответствующим таблицам: categories, posts, topics, post_search_data, users. Они, судя по всему, проходят вакуумирование примерно раз в день, поэтому мы не считаем, что замедление поиска связано с мёртвыми строками.
  • Мы вручную запустили Jobs::ReindexSearch.new({}), но не увидели существенного улучшения.

Мы рассматриваем возможность запуска rake search:reindex на этом сайте, хотя знаем, что это займёт довольно много времени. Однако хотели бы узнать, есть ли у вас какие-либо другие предложения?

Заранее спасибо.

Один быстрый и простой способ ускорить поиск — использовать настройки search prefer recent posts и search recent posts size. Это отлично работает, отдавая приоритет недавним сообщениям при формировании результатов поиска.

В остальном потребуется провести анализ производительности базы данных: изучить планы выполнения запросов, стоимость операций и т. д. Для крупных форумов потребуется больше оперативной памяти для поддержания производительности (а также соответствующая настройка параметров PostgreSQL).

Если ничего из вышеперечисленного не поможет, можно также попробовать Discourse Algolia Search

Привет, Фалько,

Спасибо за предложение: трюк с «предпочтением недавних постов» при поиске действительно помог, и в основном поиск работает нормально. Мы подозреваем, что некоторые из наших индексов могут быть повреждены, поэтому тоже начинаем изучать эту проблему, но это сильно помогло остановить утечку на данный момент.