Re: Postgresql 8.4.3 Error idle in transaccion

From: Espartano <espartano(dot)mail(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
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 14:48:22
Message-ID: CAJaC6KbEL3ab9z3gT17jRecALRhE5bmAooYVi_9DxaySFxSLhg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2011/11/14 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>:
>
> 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.
>

Gracias Alvaro por tus respuestas :)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alejandro Carrillo 2011-11-15 14:58:35 Re: Consulta sobre Fecha y Hora del Servidor.
Previous Message Rodrigo Gonzalez 2011-11-15 14:37:32 Re: Consulta sobre Fecha y Hora del Servidor.