Al desarrollar y operar aplicaciones con MongoDB, es posible que necesite analizar el rendimiento de la aplicación y su base de datos. Si observa una disminución del rendimiento, suele deberse 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 como resultado de estrategias de indexación inadecuadas o inapropiadas, o como consecuencia de patrones de diseño de esquema deficientes. En Locking Performance se analiza cómo estos factores 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.
La creación de perfiles de bases de datos puede ayudarle a comprender qué operaciones están provocando degradación.
Rendimiento de bloqueo
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 el bloqueo pueden ser intermitentes. Para comprobar si el bloqueo ha afectado a su rendimiento, consulte la sección debloqueos y la sección globalLock del 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 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 es globalLock.totalTime uptime alto en relación con, la base de datos ha existido en un estado de bloqueo durante una cantidad de tiempo significativa.
Las consultas largas pueden ser resultado de un uso ineficaz de índices, un diseño de esquema no óptimo, una estructura de consulta deficiente, problemas de arquitectura del sistema o una RAM insuficiente que resulte en lecturas del disco.
Número de conexiones
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 del documento pueden proporcionar serverStatus información:
connectionses un contenedor para los dos campos siguientes:connections.currentel número total de clientes actuales conectados a la instancia de base de datos.connections.availableel 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, aumente la capacidad de su implementación.
Para aplicaciones con mucha escritura, implemente la fragmentación y agregue una o más fragmentaciones a un clúster fragmentado para distribuir la carga entre mongod instancias.
Los picos en el número de conexiones también pueden deberse a errores de la aplicación o del controlador. Todos los controladores de MongoDB oficialmente compatibles implementan la agrupación de conexiones, lo que permite a los clientes usar y reutilizar las conexiones de forma más eficiente. Un número extremadamente alto de conexiones, especialmente sin la carga de trabajo correspondiente, suele indicar un error del controlador o de otra configuración.
Límites de conexión autogestionados
A menos que esté limitado por límites del sistema, el número máximo de conexiones entrantes que admite MongoDB se configura con el maxIncomingConnections parámetro. En sistemas Unix, los límites del sistema se pueden modificar mediante el ulimit comando o editando el /etc/sysctl archivo del sistema.Consulte la sección "Configuración de UNIX ulimit para implementaciones autogestionadas" para obtener más información.
Límites de conexión de MongoDB Atlas
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.