Re: Berserk Autovacuum (let's save next Mandrill)
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Darafei "Komяpa" Praliaskouski <me@komzpa.net>
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:27:11Z
Lists: pgsql-hackers
Hi, On 2020-03-20 01:11:23 +0300, Darafei "Komяpa" Praliaskouski wrote: > > > 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. I don't think that's true in general. As proposed this can increase the overall amount of IO (both reads and writes) due to vacuum by a *LOT*. > 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. For many bulk load cases the data will not be in cache, in particular not when individual bulk inserts are more than a few gigabytes. > 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. Yes. Which is one of the reasons why this has the potential to cause serious issues. The proposed changes very often will *increase* the total amount of IO. A good fraction of the time that will be "hidden" by caching, but it'll be far from all the time. > At some point your production database just shuts down and asks to > VACUUM in single user mode for 40 days. That basically has nothing to do with what we're talking about here. The default wraparound trigger is 200 million xids, and shutdowns start at more than 2 billion xids. If an anti-wrap autovacuum can't finish within 2 billion rows, then this won't be addressed by vacuuming more frequently (including more frequent index scans, causing a lot more IO!). Greetings, Andres Freund
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