Re: Berserk Autovacuum (let's save next Mandrill)
Darafei Komяpa Praliaskouski <me@komzpa.net>
From: Darafei "Komяpa" Praliaskouski <me@komzpa.net>
To: Masahiko Sawada <sawada.mshk@gmail.com>
Cc: David Rowley <david.rowley@2ndquadrant.com>,
Alvaro Herrera <alvherre@2ndquadrant.com>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2019-03-28T11:58:02Z
Lists: pgsql-hackers
Hi, > > Why not select a table that has inserts, updates and deletes for autovacuum just like we do for autoanalyze, not only deletes and updates like we do now? > > > > Sounds like a good idea, although I do agree with Alvaro when he > > mentions that it would be good to only invoke a worker that was only > > going to freeze tuples and not look at the indexes. > > The invoking autovacuum on table based on inserts, not only deletes > and updates, seems good idea to me. But in this case, I think that we > can not only freeze tuples but also update visibility map even when > setting all-visible. Roughly speaking I think vacuum does the > following operations. > > 1. heap vacuum 2. HOT pruning > Is it worth skipping it if we're writing a page anyway for the sake of hint bits and new xids? This will all be no-op anyway on append-only tables and happen only when we actually need something? > 3. freezing tuples > 4. updating visibility map (all-visible and all-frozen) > These two are needed, and current autovacuum launch process does not take into account that this is also needed for non-dead tuples. > 5. index vacuum/cleanup > There is a separate patch for that. But, since https://commitfest.postgresql.org/16/952/ for almost a year already Postgres skips index cleanup on tables without new dead tuples, so this case is taken care of already? > 6. truncation > This shouldn't be a heavy operation? > > With the proposed patch[1] we can control to do 5 or not. In addition > to that, another proposed patch[2] allows us to control 6. > > For append-only tables (and similar tables), what we periodically want > to do would be 3 and 4 (possibly we can do 2 as well). So maybe we > need to have both an option of (auto)vacuum to control whether to do 1 > and something like a new autovacuum threshold (or an option) to invoke > the vacuum that disables 1, 5 and 6. The vacuum that does only 2, 3 > and 4 would be much cheaper than today's vacuum and anti-wraparound > vacuum would be able to skip almost pages. > Why will we want to get rid of 1? It's a noop from write perspective and saves a scan to do it if it's not noop. Why make it faster in emergency situations when situation can be made non-emergency from the very beginning instead? > > [1] https://commitfest.postgresql.org/22/1817/ > [2] https://commitfest.postgresql.org/22/1981/ > > Regards, > > -- > Masahiko Sawada > NIPPON TELEGRAPH AND TELEPHONE CORPORATION > NTT Open Source Software Center > -- 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