¿Por qué mis consultas MongoDB son realmente lentas?

9

Heredé un gran servidor MongoDB en el trabajo y me encargaron averiguar por qué las consultas que se ejecutan en él son tan lentas. El DB contiene toneladas y toneladas de registros (del orden de 10 ^ 9) y ocupa unos 300 GiB. Al principio, pensé que el número bruto de registros podría haber sido el culpable, por lo que configuré índices en los campos apropiados. Fue de gran ayuda para las consultas que buscaban criterios que estaban en el DB, pero tomaría entre 80 y 90 minutos para consultas donde no habría coincidencias. ¿Alguna idea sobre cómo abordar esto?

Mark LeMoine
fuente
1
¿Qué versión de MongoDB? Que hardware ¿Cuántos fragmentos?
Rob Olmos
2
Oh, el dolor del problema heredado ...
gWaldo

Respuestas:

5

Parece que le falta un índice importante, especialmente porque la consulta sin coincidencias está tardando mucho más que una consulta con coincidencias. ¿Qué tipo de consulta es? ¿Quizás necesitas un índice compuesto? ¿Está utilizando wherecomo parte de la consulta?

No soy un experto en MongoDB, pero 80-90 minutos es absolutamente anormal. No sé cómo "suena" MongoDB para Arenstar, pero se ha demostrado que maneja miles de millones de documentos (terabytes de datos) .

Alexei Boronine
fuente
4

Esto podría ser demasiado tarde para una respuesta, pero pensé que valía la pena mencionarlo. Hay herramientas como el mongostat que se pueden usar para ver lo que realmente está sucediendo. Demasiados errores de índice, demasiados errores de página. Si está ejecutando operaciones de lectura y escritura simultáneas, también debe buscar el porcentaje de bloqueo. 300 GB no es una gran cantidad de mongodb para manejar. Fácilmente puede ir mucho más allá de eso.

Otros comandos útiles:

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

MongoDb es escala web ... Lo siento, tengo que decir que ...

¿No es probable que las partidas tarden un tiempo en basarse quizás en un escaneo de rango?

Lo desglosaría ... Mongo no suena como un DB para manejar 300 gb, y probablemente aún no sea lo suficientemente maduro como para saber cómo actúa con grandes cantidades de datos ...

¿Por qué razón estás usando Mongo?

Arenstar
fuente
Era justo lo que el tipo que estaba delante de mí (que se fue) se sentía cómodo usando y desafortunadamente lo había implementado. En el lado positivo, estamos abiertos a nuevas sugerencias de DB.
Mark LeMoine
¿Qué datos estás almacenando? es todo acerca de su estructura de datos
Arenstar
Son pequeños registros de archivos de registro, cada uno de los cuales contiene un ID (int), nombre del servidor (cadena), carga útil del mensaje (cadena), fecha y dirección IP. Actualmente tengo índices de identificación y nombre del servidor.
Mark LeMoine
8
Hay un montón de empresas que usan mongodb. 300 g es factible, pregunte a la gente de foursquare, wordnik y boxedice que tienen un montón de datos. en todo caso, los índices son incorrectos. Verificaría eso antes de extraer el DB y reemplazarlo con otra cosa.
luckytaxi
1
@Arenstar: ¿Qué significa escala web? ¿Y cómo es diferente a cualquier otra escala?
Joshua Partogi