Re: duda sobre pgpool

From: raul andrez gutierrez alejo <raulandrez(at)gmail(dot)com>
To: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
Cc: POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: duda sobre pgpool
Date: 2015-07-13 15:44:45
Message-ID: CAHQFj72N36P9u396gHEiDGWJHwZQ-QVKoMc6tyLGYYzMT25JEg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola.

sobre el correo respondo.

El 13 de julio de 2015, 10:26, Anthony Sotolongo <asotolongo(at)gmail(dot)com>
escribió:

> Hola Raul, gracias por responder, me quieres decir que si las actividades
> que están haciendo son muy grandes y consumen mucha memoria compartida se
> demora en la liberación de memoria y puede ser la causa de que aun esten en
> DISCARD ALL, ABORT en el estado "idle"? es decir esas actividades no deja
> que pgpool desocupe la conexión del cliente y postgres, te muestro el
> resultado de show pool_processes;
>

Para ver el consumo de CPU y RAM debe ser en Sistema Operativo, si es linux
un " top -C -U usuario_pstgres" permite ver el consumo, debe buscar en el
top el PID que retornar el show pool_processes en la columna
pool_backendpid.

>
>
> pool_pid | start_time | database |
> username | create_time | pool_counter
>
> ----------+---------------------+-----------------------+------------------------+---------------------+--------------
> 13160 | 2015-07-13 10:42:11 |
> | | |
> 2541 | 2015-07-10 17:51:31 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 09:41:41 | 1
> 12935 | 2015-07-13 09:57:25 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:03:41 | 1
> 1976 | 2015-07-10 16:09:52 |
> | | |
> 1977 | 2015-07-10 16:09:52 |
> | | |
> 1978 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:14:59 | 1
> 1979 | 2015-07-10 16:09:52 |
> | | |
> 13445 | 2015-07-13 12:13:52 |
> | | |
> 1981 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 09:42:22 | 2
> 13159 | 2015-07-13 10:42:11 |
> | | |
> 1983 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:15:27 | 1
> 12936 | 2015-07-13 09:57:25 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:04:09 | 1
> 1985 | 2015-07-10 16:09:52 |
> | | |
> 13067 | 2015-07-13 10:20:37 |
> | | |
> 1987 | 2015-07-10 16:09:52 |
> | | |
> 1988 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:14:59 | 2
> 1989 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:14:59 | 1
> 12869 | 2015-07-13 09:43:33 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:15:27 | 1
> 12866 | 2015-07-13 09:43:33 |
> | | |
> 12864 | 2015-07-13 09:43:08 |
> | | |
> 12870 | 2015-07-13 09:43:33 |
> | | |
> 1994 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 09:41:10 | 1
> 1995 | 2015-07-10 16:09:52 |
> | | |
> 12893 | 2015-07-13 09:51:11 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:15:37 | 1
> 12897 | 2015-07-13 09:52:14 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 09:54:42 | 1
> 13077 | 2015-07-13 10:24:29 |
> | | |
> 13310 | 2015-07-13 11:32:49 |
> | | |
> 2000 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 09:42:22 | 1
> 2001 | 2015-07-10 16:09:52 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 09:42:22 | 1
> 13194 | 2015-07-13 10:53:30 | postgres |
> postgres | 2015-07-13 12:13:55 | 1
> 13131 | 2015-07-13 10:35:50 |
> | | |
> 12990 | 2015-07-13 10:03:05 | db_documentacion_sdit |
> usr_documentacion_sdit | 2015-07-13 10:14:27 | 4
>
> y el resultado de la consulta:
> select pid,state,xact_start,query_start,state_change,query from
> pg_stat_activity;
>

esta consulta es recomendable ejecutar con una conexión directa a cada
postgres, porque si se ejecuta pasando por el pgpool se puede balancear y
ejecutar en el master o en el esclavo.

>
> pid | state | xact_start |
> query_start | state_change
> | query
>
>
> ------+--------+-------------------------------+-------------------------------+-------------------------------+-------------------------------------------------
> -----------------------------------
> 4351 | idle | | 2015-07-13
> 09:57:11.52977-03 | 2015-07-13 09:57:11.530004-03 | DISCARD ALL
> 4601 | idle | | 2015-07-13
> 10:21:36.21236-03 | 2015-07-13 10:21:36.212696-03 | DISCARD ALL
> 4184 | idle | | 2015-07-13
> 09:43:12.427339-03 | 2015-07-13 09:43:12.428155-03 | DISCARD ALL
> 4457 | idle | | 2015-07-13
> 10:06:24.988995-03 | 2015-07-13 10:06:24.98923-03 | DISCARD ALL
> 5936 | active | 2015-07-13 12:18:59.426768-03 | 2015-07-13
> 12:18:59.426768-03 | 2015-07-13 12:18:59.426775-03 | select
> pid,state,xact_start,query_start,state_ch
> ange,query from pg_stat_activity;
> 4193 | idle | | 2015-07-13
> 09:47:37.27413-03 | 2015-07-13 09:47:37.274514-03 | DISCARD ALL
> 4490 | idle | | 2015-07-13
> 10:06:16.192748-03 | 2015-07-13 10:06:16.19298-03 | DISCARD ALL
> 4203 | idle | | 2015-07-13
> 09:44:24.666702-03 | 2015-07-13 09:44:24.667234-03 | DISCARD ALL
> 4204 | idle | | 2015-07-13
> 09:44:24.714707-03 | 2015-07-13 09:44:24.714869-03 | DISCARD ALL
> 4205 | idle | | 2015-07-13
> 09:44:24.704854-03 | 2015-07-13 09:44:24.705512-03 | DISCARD ALL
> 4612 | idle | | 2015-07-13
> 10:28:10.681199-03 | 2015-07-13 10:28:10.681419-03 | ABORT
> 4613 | idle | | 2015-07-13
> 10:31:20.242776-03 | 2015-07-13 10:31:20.243073-03 | DISCARD ALL
> 4614 | idle | | 2015-07-13
> 10:17:02.001256-03 | 2015-07-13 10:17:02.001493-03 | DISCARD ALL
> 4618 | idle | | 2015-07-13
> 10:21:36.722948-03 | 2015-07-13 10:21:36.723194-03 | DISCARD ALL
> 4619 | idle | | 2015-07-13
> 10:17:29.934837-03 | 2015-07-13 10:17:29.93506-03 | DISCARD ALL
> 4624 | idle | | 2015-07-13
> 10:17:39.546724-03 | 2015-07-13 10:17:39.546923-03 | DISCARD ALL
> (16 filas)
>
>
> No pudiera ser una mala práctica de la app que no esta haciendo las cosas
> como debería, de algo asi como no cerrar la transaccion o no cerrar la
> conexion?
>

si es una mala practica que la app no cierre la conexión correctamente,
pero se puede dar si la aplicación es de escritorio por una pantalla azul,
si es web el servidor de aplicación se reinicia o si es movil se cae la
conexión y en ningún caso se desconecta el cliente correctamente , el
parametro client_idle_limit es una medida preventida.

>
> saludos
>
>
>
> On 13/07/15 11:41, raul andrez gutierrez alejo wrote:
>
> Hola Anthony.
>
> Pgpool es un pool de conexiones y no es necesario que al llegar una
> conexión al pgpool, pgpool tenga que abrir una conexión a cada postgres y
> luego cerrarlas, las conexiones en pgpool y el postgres se mantiene
> abiertas, el único problema que eh notado de esto que si se envía un
> reporte muy pesado, el backend puede consumir hasta 1GB de memoria
> compartida y solo liberar esta memoria hasta que el pgpool cierre la
> conexión, pero si su aplicaciones hace consultas pequeñas y muy parecidas,
> el tener la información en la memoria compartida puede tener un muy buen
> rendimiento en el planificador y el motor.
>
> El parámetro client_idle_limit es para que pgpool cierre la conexión si
> un cliente del pgpool no cerro la conexión correctamente.
>
> Para tener el comportamiento esperado de cerrar el conexión entre postgres
> y el pgppol se debe configurar en los postgres el parámetro
> "tcp_keepalives_idle", yo lo tengo configurado en 7200(2horas).
>
> Para tener en cuenta el pg_stat_activity muestra la activadad del nodo,
> para ver la actividad en el pgpool seria "show pool_pools" mas info en
> http://www.pgpool.net/docs/latest/pgpool-en.html#show-commands
>
>
>
> El 13 de julio de 2015, 9:01, Anthony Sotolongo <asotolongo(at)gmail(dot)com>
> escribió:
>
>> Estimados, tengo un pgpool configurado para acceder a 2 servidores
>> PostgreSQL con streaming replication, y tengo estos valores en el
>> pgpool.conf
>>
>> # - Life time -
>>
>> child_life_time = 300 # Pool exits
>> after being idle for this many seconds
>> child_max_connections = 0 # Pool exits
>> after receiving that many connections
>> # 0 means no exit
>> connection_life_time = 420 # Connection to
>> backend closes after being idle for this many seconds
>> # 0 means no close
>> client_idle_limit = 300 # Client is
>> disconnected after being idle for that many seconds
>> #
>> (even inside an explicit transactions!)
>> # 0 means
>> no disconnection
>>
>>
>> Tengo entendido que client_idle_limit desconectará los clientes idle
>> luego de (300 seg en este caso)
>> y que connection_life_time me desconectara de los backend de postgres
>> luego de (420 seg en este caso)
>> (no quieren decir que sean los mejores valores o los definitivos, estamos
>> tratando de ajustarlos)
>> Estamos tratando de ajustar los valores
>>
>> El tema está en que haciendo esta consulta a través del pgpool:
>> select pid,state,xact_start,query_start,state_change,query from
>> pg_stat_activity
>>
>> obtengo:
>> 4351 | idle | | 2015-07-13
>> 09:57:11.52977-03 | 2015-07-13 09:57:11.530004-03 | DISCARD ALL
>> 4601 | idle | | 2015-07-13
>> 10:21:36.21236-03 | 2015-07-13 10:21:36.212696-03 | DISCARD ALL
>> 4184 | idle | | 2015-07-13 09:43:12.
>> 427339-03 | 2015-07-13 09:43:12.428155-03 | DISCARD ALL
>> 4457 | idle | | 2015-07-13
>> 10:06:24.988995-03 | 2015-07-13 10:06:24.98923-03 | DISCARD ALL
>> 5032 | active | 2015-07-13 10:51:36.675985-03 | 2015-07-13 10:51:36.
>> 675985-03 | 2015-07-13 10:51:36.675992-03 | select
>> pid,state,xact_start,query_start,state_ch
>> ange,query from pg_stat_activity
>> : ;
>> 4193 | idle | | 2015-07-13
>> 09:47:37.27413-03 | 2015-07-13 09:47:37.274514-03 | DISCARD ALL
>> 4490 | idle | | 2015-07-13 10:06:16.
>> 192748-03 | 2015-07-13 10:06:16.19298-03 | DISCARD ALL
>> 4203 | idle | | 2015-07-13 09:44:24.
>> 666702-03 | 2015-07-13 09:44:24.667234-03 | DISCARD ALL
>> 4204 | idle | | 2015-07-13
>> 09:44:24.714707-03 | 2015-07-13 09:44:24.714869-03 | DISCARD ALL
>> 4205 | idle | | 2015-07-13
>> 09:44:24.704854-03 | 2015-07-13 09:44:24.705512-03 | DISCARD ALL
>> 4612 | idle | | 2015-07-13 10:28:10.
>> 681199-03 | 2015-07-13 10:28:10.681419-03 | ABORT
>> 4613 | idle | | 2015-07-13 10:31:20.
>> 242776-03 | 2015-07-13 10:31:20.243073-03 | DISCARD ALL
>> 4614 | idle | | 2015-07-13
>> 10:17:02.001256-03 | 2015-07-13 10:17:02.001493-03 | DISCARD ALL
>> 4618 | idle | | 2015-07-13 10:21:36.
>> 722948-03 | 2015-07-13 10:21:36.723194-03 | DISCARD ALL
>> 4619 | idle | | 2015-07-13
>> 10:17:29.934837-03 | 2015-07-13 10:17:29.93506-03 | DISCARD ALL
>> 4624 | idle | | 2015-07-13 10:17:39.
>> 546724-03 | 2015-07-13 10:17:39.546923-03 | DISCARD ALL
>>
>> La mayoria de las actividades ya pasaron los 300 seg e incluso los 420
>> seg de los parametros "client_idle_limit" y "connection_life_time" y están
>> en estado "idle" y aun estan conectadas, será que no terminan aun sus
>> querys (DISCARD ALL, ABORT, ect), o hay algo que no comprendo de los
>> parametros del pgpool, pues ya paso tiempo y aun ocupan las conexiones
>>
>>
>> La idea que necesitamos es que luego de un intervalo sin nada que hacer
>> (estado "idle") se desconecte y desocupe la conex.
>>
>>
>> Saludos y atentos a sus sugerencias.
>>
>> Anthony
>>
>>
>>
>>
>>
>>
>>
>> -
>> Enviado a la lista de correo pgsql-es-ayuda (
>> pgsql-es-ayuda(at)postgresql(dot)org)
>> Para cambiar tu suscripción:
>> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>>
>
>
>
> --
> Raul Andres Gutierrez Alejo
>
>
>

--
Raul Andres Gutierrez Alejo

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Sotolongo 2015-07-13 16:09:02 Re: duda sobre pgpool
Previous Message Anthony Sotolongo 2015-07-13 15:26:03 Re: duda sobre pgpool