A consulta Mongo leva 76 segundos em produção, mas não usa o shell do Mongo

1

Eu tenho uma consulta:

db.content.find({ "$or" : [ { "cik" : "0000764839"} , { "entitiesDetected.ids" : "ZqH9BvtitcYR88NKC"}], "pubDate" : { "$gt" : { "$date" : -2206281600000}}, "orderBy": {"pubDate": -1, "title": 1}}).explain()

Na produção, são necessários 76 segundos para retornar os dados ao cliente, de acordo com o perfil MMS.

Mas quando executo a mesma consulta no shell do Mongo, obtenho o nscanned de 12 e é super rápido - 7 ms.

Então, o que poderia estar errado? Eu perguntei ao pessoal do MMS se havia algo óbvio no meu perfil MMS, e eles não pareciam pensar que algo estava obviamente errado. Estou perplexo neste momento.

Estou usando o Ubuntu 14.04 em um Linode 2048 (dois núcleos - 2 GB de RAM).

    
por JohnAllen 20.12.2014 / 07:08

1 resposta

4

Provavelmente, seu driver está adicionando pedidos de classificação implícitos que estão saindo fora dos índices, especialmente se você estiver usando índices compostos em qualquer um desses campos. Você precisa executar um .explain() na consulta do aplicativo e, em seguida, na consulta do shell mongo e comparar as saídas dos dois. Você também deve comparar a linha de log que é registrada quando o aplicativo faz a consulta versus quando o shell faz a consulta. Anote os índices, especialmente os índices compostos e a ordem de classificação em comparação com a ordem de classificação da consulta.

    
por 20.12.2014 / 07:18

Tags