DBD::Pg currently does a 'begin' immediately after a 'commit' or
'rollback'. Unfortunately this can cause some minor problems for
PostgreSQL. It used to cause PostgreSQL 7.1 spits out lots of 'NOTICE:
InvalidateSharedInvalid: cache state reset' messages (in 7.2 this is just
a DEBUG message and not a NOTICE message so it's not so obvious).

This can be bad for performance and is caused by one or more backends
being in a transaction for a very long time.

I've written a patch which makes DBD::Pg avoid starting a new transaction
until the first statement is about to be processed. This seems to
eliminate this problem. It also allows you to turn AutoCommit on without
causing a pointless 'begin; commit;' in PostgreSQL which can sometimes be
useful to cut down on the number of queries being run (PostgreSQL treats
queries outside a 'begin' 'commit' block as being a transaction in their
own right).

The patch is at http://www.xelah.com/DBD::Pg.diff and is against 1.13.

Reply via email to