Long running transactions
I have a quite heavily accessed database that is vacuumed nightly.
Attached to that database are processes, that at times, due to the way
they are coded, stay "idle in transaction" for long periods of time
(client lib implementation issues a BEGIN). I've been reading up on
XIDs and the like and I'm trying to determine if this is going to cause
problems.
The reason I ask is one of these processes blocked a slony replication
set from doing it's initial copy with a warning about an old transaction
id. It made me wonder if long running transactions could some how hurt
things in other areas. Obviously the slony copy is not an issue for the
postgres list -- I am more interested in the effects of long running
transactions in general.
Wayne
Wayne Schroeder <raz@positivenetworks.net> writes:
I have a quite heavily accessed database that is vacuumed nightly.
Attached to that database are processes, that at times, due to the way
they are coded, stay "idle in transaction" for long periods of time
(client lib implementation issues a BEGIN). I've been reading up on
XIDs and the like and I'm trying to determine if this is going to cause
problems.
Yup, it is; you should try to fix those apps to not send BEGIN until
they are ready to do some work. Idle-in-transaction processes will tend
to prevent VACUUM from removing dead rows, for instance, because it
can't be sure that those processes shouldn't be able to see recently-dead
rows.
regards, tom lane