10 votos

¿Por qué mis consultas a MongoDB son muy, muy lentas?

He heredado un gran servidor MongoDB en el trabajo, y se me ha encargado averiguar por qué las consultas que se ejecutan contra él son tan lentas. La base de datos 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 podía ser el culpable, así que configuré índices en los campos apropiados. Esto ayudó en gran medida a las consultas que buscaban criterios que estaban en la base de datos, pero tardaba entre 80 y 90 minutos en las consultas en las que no había coincidencias. ¿Alguna idea sobre cómo solucionar esto?

1 votos

¿Qué versión de MongoDB? ¿Qué hardware? ¿Cuántos shards?

3 votos

Oh, el dolor del problema heredado...

5voto

Alexei Boronine Puntos 141

Parece que te falta un índice importante, sobre todo 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 where como parte de la consulta?

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

4voto

awsiv Puntos 91

Puede que sea demasiado tarde para una respuesta, pero pensé que valía la pena mencionarlo. Hay herramientas como mongostat que se pueden utilizar para ver lo que realmente está pasando. Demasiados fallos de índice, demasiados fallos de página. Si estás ejecutando operaciones de lectura y escritura simultáneas, entonces también deberías mirar el porcentaje de bloqueos. 300 GB no es una cantidad enorme para mongodb. Puede fácilmente ir mucho más allá de eso.

Otros comandos útiles:

    db.stats();
    db.currentOp();

2voto

gWaldo Puntos 9177

Mira el Página del perfil de la base de datos MongoDB En particular, la sección sobre Optimización del rendimiento de las consultas .

-4voto

Arenstar Puntos 2680

MongoDb es la escala web.. Lo siento, tenía que decirlo

No hay coincidencias, probablemente se basan en un escaneo de rango tal vez??

Yo lo desglosaría.. Mongo no suena como una DB para manejar 300gb, y probablemente no es lo suficientemente maduro hasta ahora para saber cómo actúa con grandes cantidades de datos

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

0 votos

Era lo que el tipo anterior a mí (que se fue) utilizaba cómodamente y lo había implementado, por desgracia. El lado positivo es que estamos abiertos a nuevas sugerencias de BD.

0 votos

¿Qué datos está almacenando? Se trata de su estructura de datos

0 votos

Se trata de pequeños registros del archivo de registro, cada uno de los cuales contiene un ID (int), el nombre del servidor (cadena), la carga útil del mensaje (cadena), la fecha y la dirección IP. Actualmente tengo índices sobre el ID y el nombre del servidor.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: