큰 사이트에서 검색 쿼리가 타임아웃됩니다

여러분, 안녕하세요.

최근 /search 쿼리에서 정기적으로 타임아웃이 발생하고 있습니다. 일부 검색어를 벤치마크해 본 결과, 특정 쿼리는 완료되는 데 최대 2분까지 걸리는 경우가 있었습니다. 이 게시물을 찾았지만, 이 문제를 해결하기 위한 추가적인 권장 사항이 있는지 궁금합니다. 저희 사례와 관련 있는 몇 가지 정보입니다:

  • 타임아웃이 더 자주 발생하는 저희 가장 큰 사이트에는 약 1,700,000개의 게시물이 있습니다.
  • 기본 postgresql autovacuum 설정을 사용 중입니다. 관련 테이블(categories, posts, topics, post_search_data, users)에 대한 통계를 수집해 본 결과, 하루에 한 번 정도 vacuum이 실행되는 것으로 보아 죽은(dead) 행 때문에 검색이 느려지는 것은 아닌 것 같습니다.
  • Jobs::ReindexSearch.new({})를 수동으로 실행해 보았지만, 상당한 개선은 보이지 않았습니다.

해당 사이트에서 rake search:reindex를 실행하는 것을 고려하고 있습니다. 이미 이 작업이 꽤 오랜 시간이 걸린다는 것은 알고 있지만, 다른 제안이 있는지 궁금합니다.

미리 감사합니다.

검색 속도를 빠르게 만드는 빠르고 간단한 방법 중 하나는 search prefer recent posts와 search recent posts size 설정을 사용하는 것입니다. 이 방법은 최신 게시물을 우선적으로 검색 결과에 포함시켜 매우 효과적으로 작동합니다.

이 외에도 데이터베이스 성능에 대한 분석이 필요합니다. 실행 계획, 비용 등을 확인해 보세요. 규모가 큰 포럼의 경우 성능을 유지하려면 더 많은 RAM이 필요하며(이에 따라 PostgreSQL 설정도 조정해야 합니다).

다른 모든 시도가 실패한다면 Discourse Algolia Search 를 시도해 볼 수도 있습니다.

Falco 씨,

제안해 주셔서 감사합니다. search prefer recent posts 트릭이 확실히 도움이 되었고, 대부분의 검색이 정상적으로 작동하고 있습니다. 일부 인덱스가 손상되었을 것으로 의심되어 해당 부분도 조사하기 시작했지만, 당분간 상황을 진정시키는 데 큰 도움이 되고 있습니다.