From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Espartano <espartano(dot)mail(at)gmail(dot)com> |
Cc: | Jaime Casanova <jaime(at)2ndquadrant(dot)com>, ruben avila galindo <ruben2218(at)gmail(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Postgresql 8.4.3 Error idle in transaccion |
Date: | 2011-11-15 01:00:30 |
Message-ID: | 1321318583-sup-9094@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Excerpts from Espartano's message of lun nov 14 19:35:11 -0300 2011:
> las dudas son las siguientes:
>
> 1.- Entiendo que cuando se utiliza una función de plpgsql hay un begin
> y commit implícitos, es posible que una transacción se quede en "idle
> in transaction" si se esta ejecutando un reindex o vacuum full en la
> tabla que tiene un foreign key y que hace referencia a la tabla donde
> la función plpgsql esta haciendo un update o un insert ?
No. En caso de que la función se bloquee por alguna razón, el estado en
pg_stat_activity va a indicar que estaba ejecutando algo (ya sea la
función directamente, o alguna otra cosa que invocó a la función). En
ningún caso va a decir "idle in transaction".
El caso que planteas puedes verlo fácilmente porque tendrá la columna
"waiting" en true.
> 2.- En el mail que has enviado anteriormente mencionas que postgresql
> no cierra automaticamente las conexiones, la pregunta es, esto no
> suceda bajo ninguna circunstancia ? ni siquiera cuando postgresql no
> detecta tráfico en una conexión/sesión por un tiempo determinado?
Hay un límite de TCP keepalives que puede cerrar una conexión.
Normalmente esto no muerde a nadie. Lo que tú señalas:
> esta pregunta la hago porque actualmente estoy revisando un problema
> en una aplicación que han desarrollado en donde trabajo, (no poseo el
> código fuente) el comportamiento es el siguiente:
>
> La aplicación abre una conexión hacia postgresql cuando arranca (es un
> daemon) y por lo visto la mantiene abierta por un tiempo indeterminado
> debido a que realiza updates contantes (existen horas en las que debe
> tener muy poca actividad) en algunas ocaciones los logs de dicha
> aplicación marcan un error -400:
>
> -400 (ECPG_PGSQL) con la siguiente descripción:
>
> sqlerrm:'no connection to the server
Suena más probable que la conexión fue cerrada por algún otro motivo;
quizás un firewall o router que está malfuncionando.
En tu caso parecería que lo más sencillo sería reconectarse a la BD en
cuanto se recibe el primero de esos errores.
> PD: La aplicación realiza un vacuum full cada x tiempo aproximadamente
> cada 15 inserts o 1 hora, entiendo que esto tampoco es correcto y el
> vauum debería ser mediante auto-vacuum, estoy en proceso de convencer
> a los des arrolladores de este tema, y creo que tal vez pueda estar
> relacionado con los estados "idle in transaction"
No creo que tenga nada que ver. Esos idle-in-transaction tienen toda la
pinta de ser bugs de la aplicación. A todo esto, esos vacuum full
probablemente sean muy contraproducentes.
--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
From | Date | Subject | |
---|---|---|---|
Next Message | Mario Jiménez Carrasco | 2011-11-15 05:15:29 | Problema al instalar. |
Previous Message | Gunnar Wolf | 2011-11-14 22:49:51 | Re: Paquetes básicos de instalación de Postgresql en Debian 6.0 |