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 <asotolo...@gmail.com <mailto:asotolo...@gmail.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.

Responder a