Docs Menu
Docs Home
/

Rendimiento de MongoDB

Mientras desarrollas y operas aplicaciones con MongoDB, es posible que necesites analizar el rendimiento de la aplicación y su base de datos. Cuando se experimenta un rendimiento degradado, a menudo se debe a las estrategias de acceso a la base de datos, la disponibilidad del hardware y el número de conexiones abiertas a la base de datos.

Es posible que experimentes limitaciones de rendimiento debido a estrategias de indexación inadecuadas o inapropiadas, o patrones de diseño de esquema deficientes. Rendimiento de bloqueo discute cómo estos pueden afectar el bloqueo interno de MongoDB.

Los problemas de rendimiento pueden indicar que la base de datos está funcionando a su máxima capacidad y que es hora de añadir capacidad adicional a la base de datos. En particular, el conjunto de trabajo de la aplicación debe caber en la memoria física disponible.

En algunos casos, los problemas de rendimiento pueden ser temporales y estar relacionados con una carga de tráfico anormal. Como se discutió en Número de conexiones, el escalado puede ayudar a reducir el tráfico excesivo.

El perfilado de bases de datos puede ayudarte a comprender qué operaciones están causando la degradación.

MongoDB utiliza un sistema de bloqueo para garantizar la coherencia del conjunto de datos. Si ciertas operaciones son prolongadas o se forma una cola, el rendimiento disminuye a medida que las solicitudes y operaciones esperan el bloqueo.

Los retardos relacionados con el bloqueo pueden ser intermitentes. Para saber si el bloqueo ha estado afectando tu rendimiento, consulta el Sección bloqueos y sección globalLock de la serverStatus salida.

Nota

Algunos campos de respuesta serverStatus no se devuelven en los clústeres gratuitos o clústeres Flex de MongoDB Atlas. Para obtener más información, consulta Comandos Limitados en la documentación de MongoDB Atlas.

Dividir locks.<type>.timeAcquiringMicros entre locks.<type>.acquireWaitCount puede ofrecer un tiempo de espera medio aproximado para un modo de bloqueo concreto.

locks.<type>.deadlockCount proporciona el número de veces que las adquisiciones de bloqueos encontraron bloqueos mutuos.

Si globalLock.currentQueue.total se mantiene constantemente alto, puede haber muchas solicitudes esperando un bloqueo. Esto indica un posible problema de concurrencia que podría estar afectando el rendimiento.

Si globalLock.totalTime es alto en relación con uptime, la base de datos ha estado en estado bloqueado durante un período considerable.

Las consultas largas pueden resultar de:

  • Uso ineficaz de los índices

  • Diseño de esquema no óptimo

  • Estructura deficiente de la consulta

  • Errores en la arquitectura del sistema

  • RAM insuficiente que provoca lecturas en disco

En algunos casos, la cantidad de conexiones entre las aplicaciones y la base de datos puede sobrepasar la capacidad del servidor para gestionar las solicitudes. Los siguientes campos en el documento serverStatus proporcionan perspectiva:

  • connections es un contenedor para los siguientes dos campos:

    • connections.current el número total de clientes actuales conectados a la instancia de base de datos.

    • connections.available el número total de conexiones no utilizadas disponibles para nuevos clientes.

Muchas solicitudes de aplicaciones concurrentes pueden sobrecargar la capacidad del servidor para satisfacer la demanda. Si este es el caso, aumenta la capacidad de tu implementación.

Para aplicaciones con mucha escritura, implementa particionado y añade una o más particiones a un clúster para distribuir la carga entre instancias de mongod.

Los picos en el número de conexiones también pueden deberse a errores de la aplicación o del controlador. Todos los controladores oficiales de MongoDB implementan el agrupamiento de conexiones, lo que permite a los clientes usar y reutilizar conexiones de manera más eficiente. Un número extremadamente alto de conexiones, especialmente sin la correspondiente carga de trabajo, suele indicar un error en el driver o en otra configuración.

A menos que esté restringido por límites a nivel de sistema, el número máximo de conexiones entrantes admitidas por MongoDB se configura con el maxIncomingConnections ajuste. En sistemas basados en Unix, los límites a nivel de sistema se pueden modificar utilizando el comando ulimit o editando el archivo /etc/sysctl de tu sistema. Consulta Configuraciones de UNIX ulimit para implementaciones autogestionadas para obtener más información.

MongoDB Atlas establece el límite para las conexiones concurrentes entrantes en función del nivel de clúster y la clase. Para obtener más información, consulta Límites de conexions y nivel de clúster en la documentación de Atlas.

Volver

Lecturas secundarias de larga ejecución

En esta página