Por que minhas consultas do MongoDB são realmente muito lentas?

9

Eu herdei um grande servidor MongoDB no trabalho e fui encarregado de descobrir por que as consultas executadas nele são tão lentas. O banco de dados contém toneladas e toneladas de registros (da ordem de 10 ^ 9) e ocupa cerca de 300 GiB. No começo, pensei que o número bruto de registros pudesse ter sido o culpado, então configurei índices nos campos apropriados. Ajudou bastante as consultas que procuravam por critérios que estavam no banco de dados, mas levaria de 80 a 90 minutos para consultas onde não havia correspondências. Alguma idéia de como lidar com isso?

Mark LeMoine
fonte
1
Qual versão do MongoDB? Qual hardware? Quantos fragmentos?
Rob Olmos
2
Oh, a dor do problema Herdado ...
gWaldo

Respostas:

5

Parece que está faltando um índice importante, principalmente porque a consulta sem correspondências está demorando muito mais do que uma consulta com correspondências. Que tipo de consulta é essa? Talvez você precise de um índice composto? Você está usando wherecomo parte da consulta?

Não sou especialista em MongoDB, mas 80-90 minutos são absolutamente anormais. Não sei como o MongoDB "soa" para o Arenstar, mas foi mostrado para lidar com bilhões de documentos (terabytes de dados) .

Alexei Boronine
fonte
4

Pode ser tarde demais para uma resposta, mas achei que valeria a pena mencionar. Existem ferramentas como o mongostat que podem ser usadas para ver o que realmente está acontecendo. Muitos erros de índice, muitas falhas de página. Se você estiver executando operações simultâneas de leitura e gravação, também deverá procurar a porcentagem de bloqueio. 300 GB não é uma quantidade enorme para o mongodb lidar. Pode facilmente ir muito além disso.

Outros comandos úteis:

    db.stats();
    db.currentOp();
awsiv
fonte
-5

MongoDb é webscale .. Desculpe tive que dizer isso ..

Provavelmente, nenhuma correspondência demora um pouco com base em talvez uma varredura de intervalo ???

Eu o detalharia .. O Mongo não parece um banco de dados para lidar com 300 GB e provavelmente ainda não está maduro o suficiente para saber como ele atua com grandes quantidades de dados.

Por que motivo você está usando o Mongo ??

Arenstar
fonte
Foi exatamente o que o cara antes de mim (que saiu) estava confortável de usar e o implementou, infelizmente. Pelo lado positivo, estamos abertos a novas sugestões de banco de dados.
Mark LeMoine
Quais dados você está armazenando ??? é tudo sobre a sua estrutura de dados
Arenstar
São pequenos registros de arquivos de log, cada um contendo um ID (int), nome do servidor (string), carga útil da mensagem (string), data e endereço IP. Atualmente, tenho índices no ID e no nome do servidor.
Mark LeMoine
8
Há uma tonelada de empresas por aí usando o mongodb. 300g é factível, pergunte ao pessoal do foursquare, wordnik e boxedice que possuem uma tonelada de dados. se alguma coisa, os índices estão incorretos. Eu os verificaria antes de remover o banco de dados e substituí-lo por outra coisa.
luckytaxi
1
@Arenstar: O que significa webscale? E como isso é diferente de qualquer outra escala?
Joshua Partogi