Greetings, * Thomas Munro (thomas.mu...@gmail.com) wrote: > On Fri, Dec 11, 2020 at 7:57 AM Stephen Frost <sfr...@snowman.net> wrote: > > * Tom Lane (t...@sss.pgh.pa.us) wrote: > > > The if-we're-going-to-delay-anyway path in vacuum_delay_point seems > > > OK to add a touch more overhead to, though. > > > > Alright, for this part at least, seems like it'd be something like the > > attached. > > > > Only lightly tested, but does seem to address the specific example which > > was brought up on this thread. > > > > Thoughts..? > > +1
Thanks for that. Attached is just a rebased version with a commit message added. If there aren't any other concerns, I'll commit this in the next few days and back-patch it. When it comes to 12 and older, does anyone want to opine about the wait event to use? I was thinking PG_WAIT_TIMEOUT or WAIT_EVENT_PG_SLEEP ... Or do folks think this shouldn't be backpatched? That would mean it wouldn't help anyone for years, which would be pretty unfortuante, hence my feeling that it's worthwhile to backpatch. Thanks! Stephen
From 9daf52b78d106c86e038dcefdb1d8345d22b9756 Mon Sep 17 00:00:00 2001 From: Stephen Frost <sfr...@snowman.net> Date: Mon, 22 Mar 2021 13:25:57 -0400 Subject: [PATCH] Use a WaitLatch for vacuum/autovacuum sleeping Instead of using pg_usleep() in vacuum_delay_point(), use a WaitLatch. This has the advantage that we will realize if the postmaster has been killed since the last time we decided to sleep while vacuuming. Discussion: https://postgr.es/m/CAFh8B=kcdk8k-Y21RfXPu5dX=bgPqJ8TC3p_qxR_ygdBS=j...@mail.gmail.com Backpatch: 9.6- --- src/backend/commands/vacuum.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index c064352e23..662aff04b4 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -2080,9 +2080,11 @@ vacuum_delay_point(void) if (msec > VacuumCostDelay * 4) msec = VacuumCostDelay * 4; - pgstat_report_wait_start(WAIT_EVENT_VACUUM_DELAY); - pg_usleep((long) (msec * 1000)); - pgstat_report_wait_end(); + (void) WaitLatch(MyLatch, + WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, + msec, + WAIT_EVENT_VACUUM_DELAY); + ResetLatch(MyLatch); VacuumCostBalance = 0; -- 2.27.0
signature.asc
Description: PGP signature