In src/backend/postmaster/bgwriter.c , I can find the following source code(PostgreSQL9.2):
/* * GUC parameters */ int BgWriterDelay = 200; ... rc = WaitLatch(&MyProc->procLatch, WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH, BgWriterDelay /* ms */ ); ... if (rc == WL_TIMEOUT && can_hibernate && prev_hibernate) { /* Ask for notification at next buffer allocation */ StrategyNotifyBgWriter(&MyProc->procLatch); /* Sleep ... */ rc = WaitLatch(&MyProc->procLatch, WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH, BgWriterDelay * HIBERNATE_FACTOR); /* Reset the notification request in case we timed out */ StrategyNotifyBgWriter(NULL); } But I also found the following in postgresql.conf: #bgwriter_delay = 200ms # 10-10000ms between rounds It is now comment . But according to the fixed code of BgWriterDelay = 200, even when I update bgwriter_delay in postgresql.conf to a different value(eg 300ms), how can it ovewrite the fixed 200ms in bgwriter.c ? I also want to know, if it is not a bug, then what is the reason?