2011/11/14 Alvaro Herrera <[email protected]>: > > 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 :) - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
