Thread: Postgres and mod_perl: table locked during vacuum?

Postgres and mod_perl: table locked during vacuum?

From
Jeff Boes
Date:
We are experiencing a fairly predictable lock-up in the overnight VACUUM
ANALYZE maintenance script.  The VACUUM gets to the pg_class table and
then stops, obviously waiting for something else to give up control of
the table.  The VACUUM script resumes precisely when the web server is
bounced.  The web server is using mod_perl, and mod_perl uses DBI code
(in a locally developed module that does establish a connection at
*compile* time in order to verify existence of tables used in the
code).  What puzzles me is that the start-up code does not do any
UPDATEs or DELETEs, so although some of the connections do not have
AutoCommit enabled, I don't understand why pg_class would seem to be
locked in a transaction.

--
Jeff Boes                                      vox 616.226.9550 ext 24
Database Engineer                                     fax 616.349.9076
Nexcerpt, Inc.                                 http://www.nexcerpt.com
           ...Nexcerpt... Extend your Expertise

Re: Postgres and mod_perl: table locked during vacuum?

From
Tom Lane
Date:
Jeff Boes <jboes@nexcerpt.com> writes:
> We are experiencing a fairly predictable lock-up in the overnight VACUUM
> ANALYZE maintenance script.  The VACUUM gets to the pg_class table and
> then stops, obviously waiting for something else to give up control of
> the table.  The VACUUM script resumes precisely when the web server is
> bounced.  The web server is using mod_perl, and mod_perl uses DBI code
> (in a locally developed module that does establish a connection at
> *compile* time in order to verify existence of tables used in the
> code).

I suppose you're not running 7.2 ?

Turn on debug_print_query and look at the log to see what queries
are being issued.  I'll bet lunch that the webserver code is doing
something like

    begin;
    select * from pg_class where ... ;
    <<go to sleep indefinitely>>

            regards, tom lane