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?


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) .


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();


-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 ??


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.