Consulta error: remaining connection slots are reserved for non-replication superuser connections

Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Consulta error: remaining connection slots are reserved for non-replication superuser connections

Alberto Paparelli-2
Hola Lista, tengo un problema con postgres, y necesitaría una mano
para ver por donde encararar la búsqueda. buscando bastante en
internet, la mayoria va por lo mas simple que es ampliar el valor de
max_connections, pero no creo que sea la solución ideal.

El trace me tira:
 File "/home/smd/env/local/lib/python2.7/site-packages/psycopg2/__init__.py",
line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
OperationalError: (OperationalError) FATAL:  remaining connection
slots are reserved for non-replication superuser connections
 None None


La infraestura es la clásica. 4 webservers con nginx, 2 servers para
la db (master y replica), y otro server de redis.

El error lo da cuando le quiero sumar un 5° servidor para la aplicación web.

Usamos SQLAlchemy + pyramid (framework python).

La aplicación tiene muchos usuarios (50000), pero no concurrentes, un
promedio de 100 usuarios conectados continuamente.

Si me pueden orientar por donde buscar les agradecería muchísimo.

Saludos!

Reply | Threaded
Open this post in threaded view
|

Re: Consulta error: remaining connection slots are reserved for non-replication superuser connections

Fernando Fontana-2
Hola,
Llegaste a la máxima cantidad de conexiones simultáneas permitidas. FIjate el parámetro max_connections de postgresql.conf, seguramente tengas que aumentarlo.

Saludos,
Fernando

El jue., 22 nov. 2018 a las 19:52, Alberto Paparelli (<[hidden email]>) escribió:
Hola Lista, tengo un problema con postgres, y necesitaría una mano
para ver por donde encararar la búsqueda. buscando bastante en
internet, la mayoria va por lo mas simple que es ampliar el valor de
max_connections, pero no creo que sea la solución ideal.

El trace me tira:
 File "/home/smd/env/local/lib/python2.7/site-packages/psycopg2/__init__.py",
line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
OperationalError: (OperationalError) FATAL:  remaining connection
slots are reserved for non-replication superuser connections
 None None


La infraestura es la clásica. 4 webservers con nginx, 2 servers para
la db (master y replica), y otro server de redis.

El error lo da cuando le quiero sumar un 5° servidor para la aplicación web.

Usamos SQLAlchemy + pyramid (framework python).

La aplicación tiene muchos usuarios (50000), pero no concurrentes, un
promedio de 100 usuarios conectados continuamente.

Si me pueden orientar por donde buscar les agradecería muchísimo.

Saludos!

Reply | Threaded
Open this post in threaded view
|

Re: Consulta error: remaining connection slots are reserved for non-replication superuser connections

Fernando Hevia-2
In reply to this post by Alberto Paparelli-2


El jue., 22 de nov. de 2018 a la(s) 19:52, Alberto Paparelli ([hidden email]) escribió:
Hola Lista, tengo un problema con postgres, y necesitaría una mano
para ver por donde encararar la búsqueda. buscando bastante en
internet, la mayoria va por lo mas simple que es ampliar el valor de
max_connections, pero no creo que sea la solución ideal.

Si no lo estás haciendo ya tenés que usar un connection pooler como pgbouncer o pgpool2. Una app web no puede prescindir de esto.
Desconozco si Pyramid te brinda pooling a la base, sino usas los que mencioné antes.

Si ya tienes pool de conexiones en la app, seguramente cada server establece una cantidad de conexiones mínimas cuya sumatoria está superando el max_connections de postgres. En ese caso te recomiendo ajustar la configuración de los poolers para que en su conjunto nunca superen el máximo de conexiones admitidas y sólo incrementar max_connections cuando sea realmente necesario (ej., encolamiento de queries en la aplicación porque no hay conexiones libres). Pero si tenes un escenario de crecimiento elástico en los app servers o queres prescindir de ese ajuste fino, directamente meté pgbouncer entre la base y los app servers. En esa configuración la aplicación se conectará a pgbouncer y no a la base directamente. Pgbouncer multiplexará las conexiones en al menos un orden de magnitud y con eso te olvidas del tema. 

Saludos.
Reply | Threaded
Open this post in threaded view
|

Re: Consulta error: remaining connection slots are reserved for non-replication superuser connections

Alberto Paparelli-2
On Thu, Nov 22, 2018 at 8:39 PM Fernando Hevia <[hidden email]> wrote:
> Si no lo estás haciendo ya tenés que usar un connection pooler como pgbouncer o pgpool2. Una app web no puede prescindir de esto.
> Desconozco si Pyramid te brinda pooling a la base, sino usas los que mencioné antes.


Gracias Fernando, no sabía sobre el tema de pooler. voy a investigar
un poco para utilizarlo.

Como es el tema, si no lo usas cada conexión (usuario) abre una
conexión a la DB?

Reply | Threaded
Open this post in threaded view
|

Re: Consulta error: remaining connection slots are reserved for non-replication superuser connections

Fernando Hevia-2

El jue., 22 de nov. de 2018 a la(s) 20:48, Alberto Paparelli ([hidden email]) escribió:
On Thu, Nov 22, 2018 at 8:39 PM Fernando Hevia <[hidden email]> wrote:
> Si no lo estás haciendo ya tenés que usar un connection pooler como pgbouncer o pgpool2. Una app web no puede prescindir de esto.
> Desconozco si Pyramid te brinda pooling a la base, sino usas los que mencioné antes.


Gracias Fernando, no sabía sobre el tema de pooler. voy a investigar
un poco para utilizarlo.

Como es el tema, si no lo usas cada conexión (usuario) abre una
conexión a la DB?

Eso o peor. Según como esté programada la aplicación un mismo usuario podría incluso abrir múltiples conexiones a la base en forma concurrente.


Reply | Threaded
Open this post in threaded view
|

Re: Consulta error: remaining connection slots are reserved for non-replication superuser connections

Alberto Paparelli-2
Hola Lista, solo para comentar que la solución de Fernando funciono perfecto!

Después de varias pruebas y unas semanas en producción va todo perfecto.

Saludos!

On Thu, Nov 22, 2018 at 10:15 PM Fernando Hevia <[hidden email]> wrote:

>
>
> El jue., 22 de nov. de 2018 a la(s) 20:48, Alberto Paparelli ([hidden email]) escribió:
>>
>> On Thu, Nov 22, 2018 at 8:39 PM Fernando Hevia <[hidden email]> wrote:
>> > Si no lo estás haciendo ya tenés que usar un connection pooler como pgbouncer o pgpool2. Una app web no puede prescindir de esto.
>> > Desconozco si Pyramid te brinda pooling a la base, sino usas los que mencioné antes.
>>
>>
>> Gracias Fernando, no sabía sobre el tema de pooler. voy a investigar
>> un poco para utilizarlo.
>>
>> Como es el tema, si no lo usas cada conexión (usuario) abre una
>> conexión a la DB?
>
>
> Eso o peor. Según como esté programada la aplicación un mismo usuario podría incluso abrir múltiples conexiones a la base en forma concurrente.
>
>