Re: pgsql: Improve autovacuum logging for aggressive and anti-wraparound ru
Nasby, Jim <nasbyj@amazon.com>
From: "Nasby, Jim" <nasbyj@amazon.com>
To: Andres Freund <andres@anarazel.de>
Cc: Sergei Kornilov <sk@zsrv.org>, Robert Haas <robertmhaas@gmail.com>,
Alvaro
Herrera <alvherre@2ndquadrant.com>,
Michael Paquier <michael@paquier.xyz>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-09-24T18:25:46Z
Lists: pgsql-hackers
Attachments
- anti_wrap.patch (application/octet-stream) patch
> On Sep 21, 2018, at 12:43 PM, Andres Freund <andres@anarazel.de> wrote: > >> But as far i can see it is possible have aggressive non-wraparound vacuum. One important difference - regular and aggressive regular can be canceled by backend,.wraparound autovacuum can not. (by checking PROC_VACUUM_FOR_WRAPAROUND in src/backend/storage/lmgr/proc.c ) > > Yes, without checking the code, they should be different. Aggressive is > controlled by vacuum_freeze_table_age whereas anti-wrap is controlled by > autovacuum_freeze_max_age (but also implies aggressive). Right, except that by the time you get into the vacuum code itself nothing should really care about that difference. AFAICT, the only thing is_wraparound is being used for is to set MyPgXact->vacuumFlags |= PROC_VACUUM_FOR_WRAPAROUND, which prevents the deadlock detector from killing an autovac process that’s trying to prevent a wraparound. I think it’d be clearer to remove is_wraparound and move the check from vacuum_rel() into lazy_vacuum_rel() (which is where the limits for HeapTupleSatisfiesVacuum get determined). Something like the attached.
Commits
-
Skip redundant anti-wraparound vacuums
- 2aa6e331ead7 12.0 landed
-
Improve autovacuum logging for aggressive and anti-wraparound runs
- 28a8fa984c63 12.0 cited
-
In relevant log messages, indicate whether vacuums are aggressive.
- b55509332f50 11.0 cited
-
Don't vacuum all-frozen pages.
- fd31cd265138 9.6.0 cited