From 7711f975313e263ccde20ff045121c8add7654a1 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 25 May 2020 03:02:56 -0700 Subject: [PATCH] walwriter: Separate sleep from delay. We should probably instead wake walwriter when wal_writer_flush_after has passed, even if wal_writer_delay wouldn't yet trigger. Author: Reviewed-By: Discussion: https://postgr.es/m/ Backpatch: --- src/backend/postmaster/walwriter.c | 5 +++-- src/backend/utils/misc/guc.c | 11 +++++++++++ src/include/postmaster/walwriter.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/backend/postmaster/walwriter.c b/src/backend/postmaster/walwriter.c index 959004b828..5f36796fcd 100644 --- a/src/backend/postmaster/walwriter.c +++ b/src/backend/postmaster/walwriter.c @@ -68,6 +68,7 @@ * GUC parameters */ int WalWriterDelay = 200; +int WalWriterSleep = 200; int WalWriterFlushAfter = 128; /* @@ -261,9 +262,9 @@ WalWriterMain(void) * sleep time so as to reduce the server's idle power consumption. */ if (left_till_hibernate > 0) - cur_timeout = WalWriterDelay; /* in ms */ + cur_timeout = WalWriterSleep; /* in ms */ else - cur_timeout = WalWriterDelay * HIBERNATE_FACTOR; + cur_timeout = WalWriterSleep * HIBERNATE_FACTOR; (void) WaitLatch(MyLatch, WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 17579eeaca..6e55fd0e5d 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2752,6 +2752,17 @@ static struct config_int ConfigureNamesInt[] = NULL, NULL, NULL }, + { + {"wal_writer_sleep", PGC_SIGHUP, WAL_SETTINGS, + gettext_noop("How often WAL writer wakes up."), + NULL, + GUC_UNIT_MS + }, + &WalWriterSleep, + 200, 1, 10000, + NULL, NULL, NULL + }, + { {"wal_writer_flush_after", PGC_SIGHUP, WAL_SETTINGS, gettext_noop("Amount of WAL written out by WAL writer that triggers a flush."), diff --git a/src/include/postmaster/walwriter.h b/src/include/postmaster/walwriter.h index 3ccc332333..a24ffd008f 100644 --- a/src/include/postmaster/walwriter.h +++ b/src/include/postmaster/walwriter.h @@ -14,6 +14,7 @@ /* GUC options */ extern int WalWriterDelay; +extern int WalWriterSleep; extern int WalWriterFlushAfter; extern void WalWriterMain(void) pg_attribute_noreturn(); -- 2.39.5