De repente, comenzamos a experimentar el siguiente problema durante la conexión a Mongo: {u'code': 261, u'ok': 0.0, u'$clusterTime': {u'clusterTime': Timestamp(1614532995, 3141), u'signature': {u'keyId': 0L, u'hash': Binary('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 0)}}, u'codeName': u'TooManyLogicalSessions', u'operationTime': Timestamp(1614532995, 3141), u'errmsg': u'Unable to add session into the cache because the number of active sessions is too high'} .
Esto sucede para cualquier controlador de conexión que usemos:
Y sucede no para todas las consultas, pero aproximadamente para el 30-40% de todas las consultas.
Mientras tanto, maxSession tiene un valor predeterminado (1000000) y tengo los siguientes datos del estado de la base de datos:
"logicalSessionRecordCache" : { "activeSessionsCount" : 2244, "sessionsCollectionJobCount" : 48430, "lastSessionsCollectionJobDurationMillis" : 0, "lastSessionsCollectionJobTimestamp" : ISODate("2021-02-28T16:56:03.438Z"), "lastSessionsCollectionJobEntriesRefreshed" : 0, "lastSessionsCollectionJobEntriesEnded" : 0, "lastSessionsCollectionJobCursorsClosed" : 0, "transactionReaperJobCount" : 49566, "lastTransactionReaperJobDurationMillis" : 1, "lastTransactionReaperJobTimestamp" : ISODate("2021-02-28T17:03:17.631Z"), "lastTransactionReaperJobEntriesCleanedUp" : 0, "sessionCatalogSize" : 33 }, Una vez que se descubrió el problema, verifiqué periódicamente varias sesiones en config.system.sessions . Varía de 11k a 560k (la mayoría de las veces estaba entre 80k y 350k), lo que parece ser bastante alto. Sin embargo, el problema seguía siendo el desconocimiento de la cantidad de sesiones.
Un error es repentino, tenemos la misma carga que antes (no sé la cantidad de sesiones que solíamos tener antes, pero no agregamos ningún cliente nuevo, tenemos alrededor de 3k conexiones.
No hay fragmentación, solo una réplica (una primaria y una secundaria).
Realmente agradecería cualquier consejo sobre cómo superar este problema.
UPD: otra cosa que me parece rara:
> db.system.sessions.count() 416068 > db.currentOp(true).inprog.length 2911¿Cómo es posible tener tal diferencia?
Lo más probable es que necesite hacer una depuración en su aplicación para averiguar dónde está filtrando sesiones.
Actualice el controlador y el servidor a las versiones más recientes.
Identifique dónde su aplicación utiliza sesiones explícitas. Las sesiones explícitas son aquellas que inicia a través de una llamada start_session. El controlador también usa sesiones automáticamente por sí mismo, se denominan sesiones implícitas.
A falta de evidencia de lo contrario, tiene una fuga de sesión. Use https://docs.mongodb.com/manual/reference/command/killAllSessions/ para destruir todas las sesiones, luego grafique la cantidad de sesiones activas a lo largo del tiempo para ver cómo se ve su tendencia.
Revise su código y haga coincidir cada llamada start_session con la forma en que finaliza esa sesión (si corresponde). Si no utiliza una API con ámbito como https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-sessions/#creating-a-session-from-a-mongo-client , debe Considere CUIDADOSAMENTE dónde se destruirá cada una de las sesiones.
Verifique su código para que no haya cursores de tiempo de espera. Esos probablemente contendrían referencias de sesión (explícitas o implícitas).
Según la información que proporcionó en la pregunta, supongo que la inspección del estado de su sesión no se realizó correctamente, así que revíselo nuevamente y asegúrese de estar viendo las cosas correctas.