Re: [pgsql-es-ayuda] Recomendación sobre el tiempo idle de las conexiones

From: "Ivan Perales M(dot)" <ivan(dot)perales(at)gmail(dot)com>
To: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
Cc: Ayuda Esp PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Recomendación sobre el tiempo idle de las conexiones
Date: 2015-08-13 19:38:05
Message-ID: CAHMuS07tmJZJaGHWOwy3JZ0y99JVPZbi_GgJ9Dzszeq+e-WxWg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muchas gracias por sus comentarios.

Con respecto a las bases de datos, si tienen razón en que debí usar mejor
schemas, pero ya que todo lo hago atravéz de jdbc, se me hizo más facil
solo resolver una base de datos diferente dependiendo el cliente
seleccionado, en lugar de estar asignando el schema a los queries,
desconosco si el driver de postgres se pueda asignar el search_path por
thread, aunque voy a tener que investigar mas a fondo.

Con respecto al pgbouncer lo voy a revisar tambien, en su momento no lo
consideré por que el software no es de alta concurrencia y mientras menos
dependencias externas para mi mejor.

Si la creación de una nueva conexió tarda algunos milisegundos, por el
volumen de uso tan mínimo creo que no es problema por lo pronto cerrar
conexiones cada que se termine la transacción.

Saludos y de nuevo muchas gracias por su tiempo a Alvaro y Anthony

2015-08-13 14:12 GMT-05:00 Anthony Sotolongo <asotolongo(at)gmail(dot)com>:

>
>
> On 13/08/15 15:52, Ivan Perales M. wrote:
>
> No creo que pgbouncer sea mi opción, presisamente mi problema es que las
> conexiones se cachean llegando así al límite de las 100 predeterminadas que
> vienen en postgres.
>
> lo has probado?
>
> Lo que necesito es algo así como un datasource global al que le pueda
> pasar datasources de bases de datos específicas y éste se encargue de
> checar idle times para cerrar conexiones.
>
> el pgbouncer hace algo como eso, chequea parámetros de configuracion(
> https://pgbouncer.github.io/config.html) como:
> server_lifetime
>
> The pooler will try to close server connections that have been connected
> longer than this. Setting it to 0 means the connection is to be used only
> once, then closed. [seconds]
>
> Default: 3600.0
> server_idle_timeout
>
> If a server connection has been idle more than this many seconds it will
> be dropped. If 0 then timeout is disabled. [seconds]
>
> Default: 600.0
> server_connect_timeout
>
> If connection and login won’t finish in this amount of time, the
> connection will be closed. [seconds]
>
> Default: 15.0
>
> query_timeout
>
> Queries running longer than that are canceled. This should be used only
> with slightly smaller server-side statement_timeout, to apply only for
> network problems. [seconds]
>
> Default: 0.0 (disabled)
> query_wait_timeout
>
> Maximum time queries are allowed to spend waiting for execution. If the
> query is not assigned to a server during that time, the client is
> disconnected. This is used to prevent unresponsive servers from grabbing up
> connections. [seconds]
>
> Default: 0.0 (disabled)
> client_idle_timeout
>
> Client connections idling longer than this many seconds are closed. This
> should be larger than the client-side connection lifetime settings, and
> only used for network problems. [seconds]
>
> Default: 0.0 (disabled)
> idle_transaction_timeout
>
> If client has been in “idle in transaction” state longer, it will be
> disconnected. [seconds]
>
> Default: 0.0 (disabled)
>
>
> saludos
>
>
> Pero no encontré ninguno y tampoco creo que lo haya, ya que no es un muy
> buen diseño manejar cantidad variables de bases de datos, pero bueno, es el
> diseño que mejor cumple nuestro requerimiento. Creo que lo que tendré que
> hacer es asignar un tiempo de vida a las conexiones idle para que se vayan
> cerrando las conexiones mas viejas, y ya que el sistema no es de alta
> concurrencia, a lo mucho 10 usuarios, espero no impacte el performance de
> estar abriendo conexiones cada cierto tiempo.
>
> Saludos
>
> 2015-08-13 13:00 GMT-05:00 Anthony Sotolongo <asotolongo(at)gmail(dot)com>:
>
>> Hola Ivan
>>
>> On 13/08/15 14:38, Ivan Perales M. wrote:
>>
>>> Buenas tardes, pido su opinión ya que no soy muy bueno administrando
>>> bases de datos.
>>>
>>> Tengo un software el cua maneja bases de datos dinámicas, es decir, una
>>> base de datos fija principal y se crea una base de datos por cada cliente
>>> que se registra en el programa. El software está desarrollado en java y
>>> utilizo BasiDataSource de apache como pool de conexiones para cada base de
>>> datos.
>>>
>>> El software es también cliente-servidor, lo que significa que un usuario
>>> puede estar trabajando con una base de datos y otro usuario con otra, lo
>>> que significa que se tienen una o más conexiones por cada base de datos,
>>> mas aparte un usuario puede switchear entre clientes con solo seleccionarlo
>>> de un listado, lo que implica crear conexiones a esa base de datos si nadie
>>> la estaba usando.
>>>
>>> Hace poco noté que un cliente del software registró mas de 100 clientes
>>> en el programa, y pusieron a una muchacha a cargar cierta información a
>>> cada cliente, por lo que se crearon 1 conexión por cada base y a eso le
>>> sumamos que otros usuarios estaban trabajando con algunos clientes, pues
>>> algunas bases de datos llegaron a tener hasta 5 conexiones. Llego un
>>> momento en que se superaron las 100 conexiones predeterminadas para
>>> usuarios regulares que ya no se pudo trabajar en muchos clientes. Al checar
>>> en pg_stat_activity efectivamente estaban 99 conexiones. El ultimo uso de
>>> la mayoria de conexiones tenia varios minutos, de entre 3 hasta 10, por lo
>>> que seguramente fueron las primeras bases de datos que se abrieron.
>>>
>>> Lo que me gustaria me aconsejaran es a decidir si aumento el numero de
>>> conexiones para usuarios regulares u optimizo los datasource para que
>>> cierren la conexión a por decir 2 o 3 minutos de que no se utilize. No se
>>> que tanto le impacte al performance que se esten abriendo nuevas conexiones
>>> en lugar de mantenerlas abiertas, por poner un ejemplo un usuario genera un
>>> reporte y comienza a analizar la información, puede llevar 10 segundos en
>>> lo que genera otro reporte para mejorar el análisis ó puede llevarse mas de
>>> 10 minutos.
>>>
>>> No conocemos los recursos que dispones, pero aumentar el num de
>> conexiones en PostgreSQL no vas a resolver mucho, no conozzo como tu driver
>> utiliza el pool de conexiones, pero sino no estas claro, se te aconseja
>> utilizar alguno, el pgbouncer te puede ayudar a resolver el tema
>>
>>> Además, van a existir algunos procesos automáticos que agarren cada base
>>> de datos para generar reportes utilizando el datasource, por lo que yo no
>>> tengo control sobre cuantas conexiones crea cada uno.
>>>
>>> Saludos y gracias por su tiempo
>>>
>>> --
>>> Lindolfo Iván Perales Mancinas
>>> Solo existen 10 tipos de personas en el mundo, las que saben binario y
>>> las que no.
>>>
>> Saludos
>>
>
>
>
> --
> Lindolfo Iván Perales Mancinas
> Solo existen 10 tipos de personas en el mundo, las que saben binario y las
> que no.
>
>
>

--
Lindolfo Iván Perales Mancinas
Solo existen 10 tipos de personas en el mundo, las que saben binario y las
que no.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Sotolongo León 2015-08-13 19:46:20 Re: Recomendación sobre el tiempo idle de las conexiones
Previous Message Anthony Sotolongo 2015-08-13 19:12:38 Re: Recomendación sobre el tiempo idle de las conexiones