Consulta de pesquisa expira em sites grandes

Olá pessoal,

Temos observado timeouts regularmente na nossa consulta /search. Realizamos testes de desempenho com alguns termos de busca e notamos que algumas consultas podem levar até 2 minutos para serem concluídas. Encontramos este post, mas gostaríamos de saber se há recomendações adicionais sobre como lidar com isso. Seguem algumas informações relevantes sobre o nosso caso específico:

  • Nosso maior site (aquele que apresenta timeouts com mais frequência) possui cerca de 1.700.000 posts.
  • Estamos utilizando as configurações padrão do autovacuum do PostgreSQL. Coletamos estatísticas das tabelas pertinentes: categories, posts, topics, post_search_data e users, e elas parecem ser submetidas ao vacuum cerca de uma vez por dia. Portanto, não acreditamos que o problema esteja relacionado a linhas mortas desacelerando nossa busca.
  • Executamos manualmente o Jobs::ReindexSearch.new({}), mas não observamos nenhuma melhoria considerável.

Estamos considerando executar o rake search:reindex nesse site, o que sabemos que levará bastante tempo, mas gostaríamos de saber se vocês têm alguma outra sugestão.

Obrigado desde já.

Uma maneira rápida e suja de obter uma busca mais rápida é usar as configurações search prefer recent posts e search recent posts size. Isso funciona muito bem ao priorizar as postagens mais recentes primeiro para preencher os resultados da busca.

Além disso, você precisaria fazer uma análise do desempenho do banco de dados. Verifique planos, custos, etc. Em fóruns maiores, será necessário mais RAM para manter o desempenho (e ajustar as configurações do PostgreSQL de acordo).

Se tudo mais falhar, você também pode tentar Discourse Algolia Search

Olá, Falco,

Obrigado pela sua sugestão. O truque de pesquisar preferencialmente posts recentes definitivamente ajudou e as buscas estão funcionando bem na maior parte do tempo. Suspeitamos que alguns dos nossos índices possam estar corrompidos, então já estamos investigando isso também, mas isso ajuda muito a conter o problema por enquanto.