Re: How to make lazy VACUUM of one table run in several transactions ?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Hannu Krosing <hannu(at)tm(dot)ee>
Cc: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: How to make lazy VACUUM of one table run in several transactions ?
Date: 2005-05-02 14:38:39
Message-ID: 18298.1115044719@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hannu Krosing <hannu(at)tm(dot)ee> writes:
> A more general solution to the problem "VACUUM does not clean dead
> tuples fast enough due to an old transaction" problem is keeping the
> OldestXmin for each table separately as a list of table OIDs in each
> PGPROC.

> This would be automatically extandable to long COPY, or in fact any
> single SQL statement running in its implicit transaction by examining
> the query plan and reserving all tables touched by the query and its
> dependencies.

This is completely unworkable, since it amounts to assuming you know at
the start of a serializable transaction which tables it will touch. In
point of fact you can't even know that for the current query let alone
future ones --- consider user-defined functions.

(Not to mention that we can't expect to fit that much info into a fixed
amount of shared memory.)

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stephen Frost 2005-05-02 14:41:42 Re: Using LDAP for authorization
Previous Message Tom Lane 2005-05-02 14:33:59 Re: Feature freeze date for 8.1