大規模サイトでの検索クエリがタイムアウトする

皆さん、こんにちは。

最近、/search クエリでタイムアウトが頻発するようになりました。いくつかの検索語句でベンチマークを行ったところ、一部のクエリは完了までに最大2分かかることがあります。この 投稿 は確認しましたが、この問題に対処するための追加的なアドバイスがあれば教えていただけないでしょうか。当社の状況に関連する情報を以下に挙げます。

  • タイムアウトが最も頻発している最大のサイトには、約170万件の投稿があります。
  • PostgreSQL のデフォルトの autovacuum 設定を使用しています。関連するテーブル(categoriespoststopicspost_search_datausers)の統計情報を収集したところ、1日おきに vacuum が実行されていることが確認できました。したがって、死んだ行が検索を遅らせている可能性は低いと考えています。
  • 手動で Jobs::ReindexSearch.new({}) を実行しましたが、顕著な改善は見られませんでした。

このサイトに対して rake search:reindex を実行することを検討していますが、これはすでに時間がかかることがわかっています。他に何か良いご提案はありますか?

ご多忙の折、お手数をおかけしますが、よろしくお願いいたします。

検索を高速化する簡単な(かつ少し荒っぽい)方法として、search prefer recent postssearch recent posts size の設定を使用する方法があります。これは、検索結果を埋める際にまず最新の投稿を優先することで、非常に効果的に機能します。

それ以外には、データベースのパフォーマンスを分析する必要があります。実行計画やコストなどを確認してください。大規模なフォーラムの場合、パフォーマンスを維持するためにより多くの RAM が必要となり、それに応じて PostgreSQL の設定を調整する必要があります。

それでもうまくいかない場合は、Discourse Algolia Search をお試しください。

こんにちは、Falcoさん

ご提案ありがとうございます。「最近の投稿を優先して検索する」というテクニックが確かに役立ち、検索機能は概ね正常に動作しています。一部のインデックスが破損している可能性もあるため、現在その調査も始めていますが、当面の間、問題の拡大を防ぐのに大いに役立っています。