Re: Berserk Autovacuum (let's save next Mandrill)
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: Masahiko Sawada <masahiko.sawada@2ndquadrant.com>, Justin Pryzby <pryzby@telsasoft.com>, Tomas Vondra <tomas.vondra@2ndquadrant.com>, Amit Kapila <amit.kapila16@gmail.com>, Masahiko Sawada <sawada.mshk@gmail.com>, Darafei Komяpa Praliaskouski <me@komzpa.net>, Andres Freund <andres@anarazel.de>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>, Alvaro Herrera <alvherre@2ndquadrant.com>, Michael Banck <mbanck@gmx.net>
Date: 2020-03-12T06:14:12Z
Lists: pgsql-hackers
On Thu, 12 Mar 2020 at 18:38, Laurenz Albe <laurenz.albe@cybertec.at> wrote: > > On Thu, 2020-03-12 at 17:47 +1300, David Rowley wrote: > > Laurenz, are you really set on the 10 million threshold? > > These values are almost the same as "autovacuum_vacuum_scale_factor" > and "autovacuum_vacuum_threshold", so you actually agree with Masahiko > with the exception that you want it tunable separately. > > I don't like the high scale factor. > > If your insert-only table was last vacuumed when it had 500 million rows, > the next autovacuum will freeze 150 million tuples, which is a lot. > The impact will be less than that of an anti-wraparound vacuum because > it is not as persistent, but if our 150 million tuple autovacuum backs > down because it hits a lock or gets killed by the DBA, that is also not > good, since it will just come again. > And the bigger the vacuum run is, the more likely it is to meet an obstacle. > > So I think that large insert-only tables should be vacuumed more often > than that. If the number of tuples that have to be frozen is small, > the vacuum run will be short and is less likely to cause problems. > That is why I chose a scale factor of 0 here. That's a good point. If those 150 million inserts were done one per transaction, then it wouldn't take many more tuples before wraparound vacuums occur more often than insert vacuums. The only way I see around that is to a) configure it the way you'd like, or; b) add yet another GUC and reloption to represent how close to autovacuum_freeze_max_age / autovacuum_multixact_freeze_max_age the table is. I'm not very excited about adding yet another GUC, plus anti-wraparound vacuums already occur 10 times more often than they need to. If we added such a GUC and set it to, say, 0.1, then they'd happen 100 times more often than needed before actual wraparound occurs. I'm starting to see now why you were opposed to the scale_factor in the first place. I really think that this is really a problem with the design of the threshold and scale_factor system. I used to commonly see people with larger tables zeroing out the scale_factor and setting a reasonable threshold or dropping the scale_factor down to some fraction of a percent. I don't really have any better design in mind though, at least not one that does not require adding new vacuum options.
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