Re: Berserk Autovacuum (let's save next Mandrill)
Darafei Komяpa Praliaskouski <me@komzpa.net>
From: Darafei "Komяpa" Praliaskouski <me@komzpa.net>
To: Andres Freund <andres@anarazel.de>
Cc: Laurenz Albe <laurenz.albe@cybertec.at>,
Justin Pryzby <pryzby@telsasoft.com>, Masahiko Sawada <masahiko.sawada@2ndquadrant.com>,
David Rowley <dgrowleyml@gmail.com>, Tomas Vondra <tomas.vondra@2ndquadrant.com>,
Amit Kapila <amit.kapila16@gmail.com>, Masahiko Sawada <sawada.mshk@gmail.com>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>, Alvaro Herrera <alvherre@2ndquadrant.com>, Michael Banck <mbanck@gmx.net>
Date: 2020-03-19T22:11:23Z
Lists: pgsql-hackers
> > According to my reckoning, that is the remaining objection to the patch > > as it is (with ordinary freezing behavior). > > > > How about a scale_factor od 0.005? That will be high enough for large > > tables, which seem to be the main concern here. > > Seems low on a first blush. On a large-ish table with 1 billion tuples, > we'd vacuum every 5 million inserts. For many ETL workloads this will > result in a vacuum after every bulk operation. Potentially with an index > scan associated (even if there's no errors, a lot of bulk loads use ON > CONFLICT INSERT leading to the occasional update). This is a good and wanted thing. Upthread it was already suggested that "everyone knows to vacuum after bulk operations". This will go and vacuum the data while it's hot and in caches, not afterwards, reading from disk. > > I am not sure about b). In my mind, the objective is not to prevent > > anti-wraparound vacuums, but to see that they have less work to do, > > because previous autovacuum runs already have frozen anything older than > > vacuum_freeze_min_age. So, assuming linear growth, the number of tuples > > to freeze during any run would be at most one fourth of today's number > > when we hit autovacuum_freeze_max_age. > > This whole chain of arguments seems like it actually has little to do > with vacuuming insert only/mostly tables. The same problem exists for > tables that aren't insert only/mostly. Instead it IMO is an argument for > a general change in logic about when to freeze. > > What exactly is it that you want to achieve by having anti-wrap vacuums > be quicker? If the goal is to reduce the window in which autovacuums > aren't automatically cancelled when there's a conflicting lock request, > or in which autovacuum just schedules based on xid age, then you can't > have wraparound vacuums needing to do substantial amount of work. The problem hit by Mandrill is simple: in modern cloud environments it's sometimes simply impossible to read all the data on disk because of different kinds of throttling. At some point your production database just shuts down and asks to VACUUM in single user mode for 40 days. You want vacuum to happen long before that, preferably when the data is still in RAM, or, at least, fits your cloud provider's disk burst performance budget, where performance of block device resembles that of an SSD and not of a Floppy Disk. Some more reading on how that works: https://aws.amazon.com/ru/blogs/database/understanding-burst-vs-baseline-performance-with-amazon-rds-and-gp2/ -- Darafei Praliaskouski Support me: http://patreon.com/komzpa
Commits
-
Further improve stability fix for partition_aggregate test.
- 18d85e9b8a2b 13.0 landed
-
Improve stability fix for partition_aggregate test.
- 7cb0a423f914 13.0 landed
-
Attempt to stabilize partitionwise_aggregate test
- cefb82d49e21 13.0 landed
-
Fix race condition in statext_store().
- fe3036527a1f 13.0 landed
- 6c426cd43790 12.3 landed
-
Attempt to fix unstable regression tests, take 2
- 24566b359d09 13.0 landed
-
Attempt to fix unstable regression tests
- 2dc16efedc76 13.0 landed
-
Trigger autovacuum based on number of INSERTs
- b07642dbcd8d 13.0 landed
-
Fix upper limit for vacuum_cleanup_index_scale_factor
- 4d54543efa5e 11.0 cited