On 9/5/13 8:29 PM, Gavin Flower wrote:
How about a 'VACUUM AFTER' command (part of the 'BEGIN' transaction syntax?) 
that would:

 1. only be valid in a transaction
 2. initiate a vacuum after the current transaction completed
 3. defer any vacuum triggered due to other criteria

If the transaction was rolled back: then if there was a pending vacuum, due to 
other reasons, it would then be actioned.

On normal transaction completion, then if there was a pending vacuum it would 
be combined with the one in the transaction.

Still would need some method of ensuring any pending vacuum was done if the 
transaction hung, or took too long.

I *really* like the idea of BEGIN VACUUM AFTER, but I suspect it would be of 
very limited usefulness if it didn't account for currently running transactions.

I'm thinking we add a vacuum_after_xid field somewhere (pg_class), and instead 
of attempting to vacuum inside the backend at commit time the transaction would 
set that field to it's XID unless the field already had a newer XID in it.

autovac would then add all tables where vacuum_after_xid < the oldest running 
transaction to it's priority list.
--
Jim C. Nasby, Data Architect                       j...@nasby.net
512.569.9461 (cell)                         http://jim.nasby.net


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to