Suchanfrage bei großen Seiten führt zu Zeitüberschreitung

Hallo zusammen,

wir stellen regelmäßig Timeouts bei unserer /search-Abfrage fest. Wir haben einige Suchbegriffe getestet, und manche Abfragen benötigen bis zu 2 Minuten, um abzuschließen. Wir haben diesen Beitrag gefunden, sind uns aber nicht sicher, ob es zusätzliche Empfehlungen gibt, wie man damit umgehen kann. Hier einige relevante Informationen zu unserem konkreten Fall:

  • Unsere größte Site (diejenige, die am häufigsten timeouts zeigt) hat etwa 1.700.000 Beiträge.
  • Wir verwenden die Standard-Einstellungen für das PostgreSQL-Autovacuum. Wir haben Statistiken zu den relevanten Tabellen gesammelt: categories, posts, topics, post_search_data und users. Sie scheinen etwa einmal täglich vakuumiert zu werden, daher glauben wir nicht, dass tote Zeilen unsere Suche verlangsamen.
  • Wir haben Jobs::ReindexSearch.new({}) manuell ausgeführt, konnten aber keine deutliche Verbesserung feststellen.

Wir erwägen, auf dieser Site rake search:reindex auszuführen, was wie wir wissen einige Zeit in Anspruch nehmen wird. Haben Sie jedoch noch andere Vorschläge?

Vielen Dank im Voraus

Ein schneller und pragmatischer Weg, um die Suche zu beschleunigen, besteht darin, die Einstellungen „Suche bevorzugt neuere Beiträge“ und „Größe der neueren Beiträge in der Suche“ zu verwenden. Das funktioniert sehr gut, indem neuere Beiträge priorisiert werden, um die Suchergebnisse zu füllen.

Ansonsten müssten Sie eine Analyse der Datenbankleistung durchführen. Prüfen Sie Ausführungspläne, Kosten usw. Bei größeren Foren benötigen Sie mehr RAM, um die Leistung aufrechtzuerhalten (und die PostgreSQL-Einstellungen entsprechend anzupassen).

Wenn alles andere versagt, können Sie auch versuchen: Discourse Algolia Search

Hey Falco,

vielen Dank für deinen Vorschlag. Der Trick mit search prefer recent posts hat definitiv geholfen, und die Suchen funktionieren größtenteils einwandfrei. Wir vermuten, dass einige unserer Indizes beschädigt sein könnten, und untersuchen das gerade ebenfalls. Aber das hilft uns vorerst enorm, den Schaden zu begrenzen.