Saltar al contenido

Heroku Postgres: Demasiadas conexiones. ¿Cómo elimino estas conexiones?

Ximena, miembro de este gran staff, nos hizo el favor de redactar este tutorial ya que domina perfectamente este tema.

Solución:

Tal vez echar un vistazo a lo que heroku pg:kill puede hacer por ti? https://devcenter.heroku.com/articles/heroku-postgresql#pg-ps-pg-kill-pg-killall

heroku pg:killall matará todas las conexiones abiertas, pero eso puede ser un instrumento contundente para sus necesidades. Curiosamente, en realidad puedes matar conexiones específicas utilizando los clips de datos de heroku.

Para obtener una lista detallada de conexiones, puede consultar a través de clips de datos:

SELECT * FROM pg_stat_activity;

En algunos casos, es posible que desee eliminar todas las conexiones asociadas con una dirección IP (su computadora portátil o, en mi caso, un servidor que ahora fue destruido).

Puede ver cuántas conexiones pertenecen a cada IP de cliente usando:

SELECT client_addr, count(*) 
FROM pg_stat_activity 
WHERE client_addr is not null 
  AND client_addr <> (select client_addr from pg_stat_activity where pid=pg_backend_Tid()) 
GROUP BY client_addr; 

que enumerará la cantidad de conexiones por IP, excluyendo la IP que usa dataclips.

Para eliminar realmente las conexiones, pasa su “pid” a pg_terminate_backend(). En el caso sencillo:

SELECT pg_terminate_backend(1234)

donde 1234 es el PID infractor que encontró en pg_stat_activity.

En mi caso, quería eliminar todas las conexiones asociadas con un servidor (ahora muerto), así que usé:

SELECT pg_terminate_backend(pid), host(client_addr) 
FROM pg_stat_activity 
WHERE host(client_addr) = 'IP HERE'

De la documentación de Heroku (el énfasis es mío):

FATAL: demasiadas conexiones para el rol

FATAL: demasiadas conexiones para el rol”[role name]Esto ocurre en los planes de nivel de inicio (de desarrollo y básico), que tienen un límite máximo de conexión de 20 por usuario. Para resolver este error, cierre algunas conexiones a su base de datos deteniendo trabajadores en segundo plano, reduciendo la cantidad de dynos o reiniciando su aplicación en caso de que haya creado fugas de conexión con el tiempo. Puede encontrar una discusión sobre el manejo de conexiones en una aplicación Rails aquí.

Debido a que Heroku no proporciona acceso de superusuario, sus opciones se limitan a las anteriores.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *