Knex: obteniendo "Knex: Tiempo de espera para adquirir una conexión. El grupo probablemente esté lleno". error

Creado en 2 nov. 2017  ·  18Comentarios  ·  Fuente: knex/knex

Me enfrento a "Error de tiempo de espera de rechazo no manejado: Knex: Tiempo de espera para adquirir una conexión. El grupo probablemente esté lleno. ¿Está perdiendo una llamada .transacting (trx)?" asunto. Hay toneladas de consultas en ejecución, por lo que no puedo encontrar la consulta que lo causa. Este problema parece volverse serio cuando aumenta el tamaño de postgres. ¿Hay alguna solución?

Comentario más útil

Resolví el problema con estas versiones:

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

Todos 18 comentarios

También estoy enfrentando este problema.

Tengo el mismo problema.

La solución es aislar la fuente y arreglarla. No se trata de un error de "consulta", sino de un problema de arquitectura de la aplicación. El error ocurre cuando knex no puede adquirir una conexión dentro de los 60 segundos (predeterminados), y lo más probable es que la razón sea que el grupo está lleno.

En otras palabras, hay muchas cosas que pueden causar el error. Dos de los más comunes son:

  1. Se olvida de confirmar transacciones/se olvida de llamar a .transacing(trx) en los generadores de consultas mientras ya está en el grupo máximo, lo que no solo hace que la transacción esté inactiva, sino que también arroja el error ya que no se pudo adquirir ninguna conexión.
  2. El grupo se mantiene continuamente ocupado a su capacidad máxima durante al menos (predeterminado) 60 segundos sin parar, por ejemplo, debido al tráfico pesado o procedimientos de ejecución prolongada.

Debe revisar el estado de su base de datos cuando ocurra este error. ¿Hay muchas conexiones inactivas? ¿Hay demasiadas conexiones? etc

También estoy enfrentando este error.

rejecter(new _bluebird2.default.TimeoutError('Knex: Timeout acquiring a connection. The pool is probably full. ' + 'Are you missing a .transacting(trx) call?')); ^ TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?

Mientras trabajamos para excavar nuestras conexiones de arquitectura, ¿hay alguna manera de evitar que este error bloquee la aplicación? ¿O al menos el error podría señalar la pila?

@rsfernandes Siempre que use controladores catch en sus constructores, no veo cómo este error bloquearía toda la aplicación.

En cuanto a la pila, recomiendo longStackTraces . No hay nada integrado en knex específicamente para esta pila de errores.

FWIW Recibí este error con un servicio de base de datos de AWS Aurora, y fue causado por la función de apagado automático que finaliza la base de datos después de la inactividad (el inicio automático de la base de datos tarda aproximadamente un minuto, y eso provocó que Knex se agotara)

https://github.com/tgriesser/knex/issues/3159 Hay una lista de algunas sugerencias de solución para aurora.

@wubzz

  1. El grupo se mantiene continuamente ocupado a su capacidad máxima durante al menos (predeterminado) 60 segundos sin parar, por ejemplo, debido al tráfico pesado o procedimientos de ejecución prolongada.

Si este es el problema, ¿cuáles son las posibles recomendaciones a seguir si simplemente no puede hacer menos trabajo? 😅

¿Aumentar el tiempo de espera o la capacidad máxima?

Mi problema no era con knex sino con la regla de entrada del grupo de seguridad en mi aws RDS. Se configuró solo en la dirección IP de mi máquina local, por lo que no pude conectarme desde la instancia ec2. fue frustrante porque el mensaje de error no fue útil.
Si tiene este mensaje de error, podría estar relacionado con el hecho de que knex no puede establecer una conexión. ¡así que revisa tus redes también!

Sí, supongo que eso puede suceder si la conexión se bloquea por completo... tal vez configurar un tiempo de espera de conexión diferente y un tiempo de espera de acquite podría distinguir entre estos dos casos.

Resolví el problema con estas versiones:

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

Es posible que deba cambiar al Nodo 12 NO al Nodo 14

Tenía un límite de grupo de base de datos, podía solucionar el problema configurando min y max

Tuve el mismo problema en mi mac. estaba ejecutando knex desde la terminal de línea de comandos y de repente comencé a ver este problema de Knex: Timeout... Descubrí que el problema se estaba moviendo a zsh shell en lugar de bash. He estado usando bash durante mucho tiempo y recientemente intenté cambiar a zsh según las pautas de Apple. Tan pronto como volví a bash, se solucionó.

Espero que ayude a alguien.

Es posible que deba cambiar al Nodo 12 NO al Nodo 14

Esto funcionó para mí en mac docker-compose node: 12 en lugar de node (v14). Gracias.

Estaba tratando de hacer cumplir el uso de la versión del nodo del servidor usando nvm exec 12 node ./src/index... y estaba teniendo el error anterior.

Al iniciar el nodo directamente, el error desapareció y se estableció la conexión.

Así que asegúrese de estar usando una configuración simple y normal y tal vez el nodo 12.

@batadamnjanovic me salvaste después de dos días completos de investigación. TY!!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

nklhrstv picture nklhrstv  ·  3Comentarios

zettam picture zettam  ·  3Comentarios

sandrocsimas picture sandrocsimas  ·  3Comentarios

arconus picture arconus  ·  3Comentarios

npow picture npow  ·  3Comentarios