Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/
Manual de base de datos
/

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.

Algunos usuarios pueden experimentar limitaciones de rendimiento debido a estrategias de indexación inadecuadas o inapropiadas, o a patrones de diseño de esquema deficientes. EnRendimiento de Bloqueo se explica cómo estas limitaciones 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ñadirle capacidad. 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 explica en Número de conexiones, el escalado puede ayudar a reducir el tráfico excesivo.

perfilador de base de datos puede ayudarte a entender qué operaciones están causando la degradación.

MongoDB utiliza un sistema de bloqueo para garantizar la consistencia de los conjuntos de datos. Si ciertas operaciones son de larga duración o se forma una cola, el rendimiento se degradará mientras las solicitudes y operaciones esperan el bloqueo.

Las ralentizaciones relacionadas con los bloqueos pueden ser intermitentes. Para comprobar si el bloqueo ha afectado al rendimiento, consulte la sección de bloqueos y la sección globalLock del serverStatus salida.

Nota

Algunos serverStatus campos de respuesta no se devuelven en0 clústeres M ni Flex de MongoDB Atlas. Para obtener más información, consulte Comandos limitados en la documentación de MongoDB Atlas.

Dividir locks.<type>.timeAcquiringMicros por puede dar un tiempo de espera promedio aproximado para un modo de bloqueo locks.<type>.acquireWaitCount particular.

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

Si es constantemente alto, es posible que haya un gran número de solicitudes esperando un bloqueo. Esto indica un posible problema de concurrencia que podría estar afectando el globalLock.currentQueue.total rendimiento.

Si globalLock.totalTime es alto en relación con uptime, la base de datos ha estado en un estado de bloqueo durante un tiempo significativo.

Las queries largas pueden resultar del uso ineficaz de índices, de un diseño de esquema no óptimo, de una estructura deficiente de la query, de problemas de arquitectura del sistema o de una memoria RAM insuficiente que conduce a lecturas desde el disco.

En algunos casos, el número 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 serverStatus documento pueden proporcionar 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.

Si hay numerosas solicitudes de aplicaciones simultáneas, la base de datos podría tener dificultades para satisfacer la demanda. En este caso, deberá aumentar la capacidad de su 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 ser el resultado de errores en la aplicación o el controlador. Todos los controladores de MongoDB oficialmente compatibles 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 una carga de trabajo correspondiente, suele ser indicativo de un error de controlador u 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 de conexiones entrantes simultáneas según el nivel y la clase del clúster. Para obtener más información, consulte Límites de conexión y nivel del clúster en la documentación de Atlas.

Volver

Lista de comprobación de desarrollo

En esta página