Re: New strategies for freezing, advancing relfrozenxid early - Mailing list pgsql-hackers
From | Matthias van de Meent |
---|---|
Subject | Re: New strategies for freezing, advancing relfrozenxid early |
Date | |
Msg-id | CAEze2WjrmviE4KDRzp6pGBDMpwB3cnLi=+4qYLGGKKqq3uYWvA@mail.gmail.com Whole thread Raw |
In response to | Re: New strategies for freezing, advancing relfrozenxid early (Matthias van de Meent <boekewurm+postgres@gmail.com>) |
Responses |
Re: New strategies for freezing, advancing relfrozenxid early
|
List | pgsql-hackers |
On Thu, 5 Jan 2023 at 02:21, I wrote: > > On Tue, 3 Jan 2023 at 21:30, Peter Geoghegan <pg@bowt.ie> wrote: > > > > Attached is v14. > > [PATCH v14 3/3] Finish removing aggressive mode VACUUM. > > I've not completed a review for this patch - I'll continue on that > tomorrow: This is that. > @@ -2152,10 +2109,98 @@ lazy_scan_noprune(LVRelState *vacrel, > [...] > + /* wait 10ms, then 20ms, then 30ms, then give up */ > [...] > + pg_usleep(1000L * 10L * i); Could this use something like autovacuum_cost_delay? I don't quite like the use of arbitrary hardcoded millisecond delays - it can slow a system down by a significant fraction, especially on high-contention systems, and this potential of 60ms delay per scanned page can limit the throughput of this new vacuum strategy to < 17 pages/second (<136kB/sec) for highly contended sections, which is not great. It is also not unlikely that in the time it was waiting, the page contents were updated significantly (concurrent prune, DELETEs committed), which could result in improved bounds. I think we should redo the dead items check if we waited, but failed to get a lock - any tuples removed now reduce work we'll have to do later. > +++ b/doc/src/sgml/ref/vacuum.sgml > [...] Pages where > + all tuples are known to be frozen are always skipped. "...are always skipped, unless the >DISABLE_PAGE_SKIPPING< option is used." > +++ b/doc/src/sgml/maintenance.sgml There are a lot of details being lost from the previous version of that document. Some of the details are obsolete (mentions of aggressive VACUUM and freezing behavior), but others are not (FrozenTransactionId in rows from a pre-9.4 system, the need for vacuum for prevention of issues surrounding XID wraparound). I also am not sure this is the best place to store most of these mentions, but I can't find a different place where these details on certain interesting parts of the system are documented, and plain removal of the information does not sit right with me. Specifically, I don't like the removal of the following information from our documentation: - Size of pg_xact and pg_commit_ts data in relation to autovacuum_freeze_max_age Although it is less likely with the new behaviour that we'll hit these limits due to more eager freezing of transactions, it is still important for users to have easy access to this information, and tuning this for storage size is not useless information. - The reason why VACUUM is essential to the long-term consistency of Postgres' MVCC system Informing the user about our use of 32-bit transaction IDs and that we update an epoch when this XID wraps around does not automatically make the user aware of the issues that surface around XID wraparound. Retaining the explainer for XID wraparound in the docs seems like a decent idea - it may be moved, but please don't delete it. - Special transaction IDs, their meaning and where they can occur I can't seem to find any other information in the docs section, and it is useful to have users understand that certain values are considered special: FrozenTransactionId and BootstrapTransactionId. Kind regards, Matthias van de Meent
pgsql-hackers by date: