Re: Plans for solving the VACUUM problem - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: Plans for solving the VACUUM problem |
Date | |
Msg-id | 200105190357.f4J3v1h17419@candle.pha.pa.us Whole thread Raw |
In response to | Re: Plans for solving the VACUUM problem (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: Plans for solving the VACUUM problem
|
List | pgsql-hackers |
> Bruce Momjian <pgman@candle.pha.pa.us> writes: > > Hey, I have an idea. Can we do subtransactions as separate transactions > > (as Tom mentioned), and put the subtransaction id's in the WAL, so they > > an be safely committed/rolledback as a group? > > It's not quite that easy: all the subtransactions have to commit at > *the same time* from the point of view of other xacts, or you have > consistency problems. So there'd need to be more xact-commit mechanism > than there is now. Snapshots are also interesting; we couldn't use a > single xact ID per backend to show the open-transaction state. Yes, I knew that was going to come up that you have to add a lock to the pg_log that is only in affect when someone is commiting a transaction with subtransactions. Normal transactions get read/sharedlock, while subtransaction needs exclusive/writelock. Seems a lot easier than UNDO. Vadim you mentioned UNDO would allow space reuse for rolledback transactions, but in most cases the space reuse is going to be for old copies of committed transactions, right? Were you going to use WAL to get free space from old copies too? Vadim, I think I am missing something. You mentioned UNDO would be used for these cases and I don't understand the purpose of adding what would seem to be a pretty complex capability: > 1. Reclaim space allocated by aborted transactions. Is there really a lot to be saved here vs. old tuples of committed transactions? > 2. Implement SAVEPOINTs. > Just to remind -:) - in the event of error discovered by server > - duplicate key, deadlock, command mistyping, etc, - transaction > will be rolled back to the nearest implicit savepoint setted > just before query execution; - or transaction can be aborted by > ROLLBACK TO <savepoint_name> command to some explicit savepoint > setted by user. Transaction rolled back to savepoint may be > continued. Discussing, perhaps using multiple transactions. > 3. Reuse transaction IDs on postmaster restart. Doesn't seem like a huge win. > 4. Split pg_log into small files with ability to remove old ones (which > do not hold statuses for any running transactions). That one is interesting. Seems the only workaround for that would be to allow a global scan of all databases and tables to set commit flags, then shrink pg_log and set XID offset as start of file. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
pgsql-hackers by date: