Gestión de conexiones

Las conexiones con el despliegue de Databases for MongoDB utilizan recursos, por lo que es importante tener en cuenta cuántas conexiones necesita al ajustar el rendimiento del despliegue. Utilice el siguiente comando en el shell MongoDB o en un cliente MongoDB para mostrar el número máximo de conexiones permitidas y el uso actual.

  db.serverStatus().connections

Salida de ejemplo:

{
  current: 33,
  available: 65503,
  totalCreated: 21858,
  rejected: 0,
  active: 9,
  threaded: 33,
  exhaustIsMaster: 0,
  exhaustHello: 6,
  awaitingTopologyChanges: 6
}
Campo Significado
current: 33 Total de conexiones de clientes actuales, incluidas las inactivas. Así es como muchos clientes están conectados ahora mismo.
available: 65503 El número de conexiones de cliente adicionales que MongoDB puede aceptar antes de alcanzar el límite (se sugiere un máximo de ~65536).
totalCreated: 21858 Número total de conexiones creadas desde que se inició el servidor. Le ayuda a comprender la rotación de conexiones.
rejected: 0 Número de intentos de conexión rechazados por haberse alcanzado el límite.
threaded: 78 Número de subprocesos que gestionan actualmente las conexiones. A menudo coincide con current.
active: 23 Número de conexiones que ejecutan actualmente operaciones - el resto (78 - 23 = 55) están inactivas.
exhaustIsMaster: 0 Relacionado con antiguos protocolos de descubrimiento de servidores (ahora sustituidos). Normalmente 0.
exhaustHello: 19 Conexiones de monitorización persistentes (por ejemplo, de controladores que utilizan el comando hello en la monitorización).
awaitingTopologyChanges: 19 Conexiones en espera de cambios de topología (por ejemplo, para la supervisión de alta disponibilidad en conjuntos de réplica).

Nota:

  • maximum connection = current + available
  • La ausencia de conexiones rechazadas significa que no se ha alcanzado el límite.
  • Por defecto, MongoDB permite hasta 65536 conexiones.
  • La superación del límite de conexiones para el despliegue puede hacer que la base de datos deje de ser accesible para las aplicaciones.

Terminación de las conexiones MongoDB

Para terminar (matar) las conexiones MongoDB, utilice el siguiente método, normalmente a través del shell MongoDB: Ejecute el siguiente comando para listar las operaciones activas, incluidas las conexiones.

  db.currentOp(true).inprog

Salida:

{
  "client" : "IP:PORT",
  "active" : true,
  "opid" : <opid>,
  ...
}

Una vez que encuentre el opid de la operación (por ejemplo, opid: 12345), elimínelo utilizando el siguiente comando:

    db.killOp(12345)
  • Se necesitan privilegios de administrador para ejecutar currentOp y killOp.

MongoDB agrupación de conexiones

Un pool de conexiones en MongoDB es una caché de conexiones reutilizables entre su aplicación y el servidor MongoDB. En lugar de abrir y cerrar una nueva conexión para cada solicitud (lo que resulta caro), la aplicación mantiene un pool de conexiones y las reutiliza para múltiples operaciones. Una manera de evitar que se supere el límite de conexiones y garantizar que las conexiones de las aplicaciones se gestionan de forma eficiente es a través de la agrupación de conexiones. El controlador gestiona la creación, reutilización y cierre de conexiones en función de la demanda y la configuración.

Node.js (Mongoose o controlador nativo MongoDB ):

mongoose.connect(uri, {
  maxPoolSize: 100,      // default is 100
  minPoolSize: 10,
  maxIdleTimeMS: 30000,
  serverSelectionTimeoutMS: 5000
});

Python (PyMongo):

client = MongoClient(uri, maxPoolSize=100, minPoolSize=10)

Java:

MongoClientSettings settings = MongoClientSettings.builder()
    .applyToConnectionPoolSettings(builder ->
        builder.maxSize(100).minSize(10).maxConnectionIdleTime(30, TimeUnit.SECONDS))
    .build();
term Descripción
maxPoolSize (o maxConnectionsPerHost) El número máximo de conexiones que el pool puede abrir al servidor MongoDB.
minPoolSize El número mínimo de conexiones mantenidas en el pool.
waitQueueTimeoutMS Tiempo que la aplicación espera una conexión del pool cuando todos están ocupados.
maxIdleTimeMS El tiempo que una conexión puede permanecer inactiva antes de cerrarse.