mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Dynamically set a lower bound on autovacuum nap time so that we don't rebuild
the database list too often. Per bug report from Łukasz Jagiełło and ensuing discussion on pgsql-performance.
This commit is contained in:
parent
e5de601267
commit
e8f28cb25d
@ -55,7 +55,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.95 2009/05/15 15:56:39 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.96 2009/06/09 16:41:02 alvherre Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -123,6 +123,8 @@ int Log_autovacuum_min_duration = -1;
|
||||
/* how long to keep pgstat data in the launcher, in milliseconds */
|
||||
#define STATS_READ_DELAY 1000
|
||||
|
||||
/* the minimum allowed time between two awakening of the launcher */
|
||||
#define MIN_AUTOVAC_SLEEPTIME 100.0 /* milliseconds */
|
||||
|
||||
/* Flags to tell if we are in an autovacuum process */
|
||||
static bool am_autovacuum_launcher = false;
|
||||
@ -822,11 +824,11 @@ launcher_determine_sleep(bool canlaunch, bool recursing, struct timeval * nap)
|
||||
return;
|
||||
}
|
||||
|
||||
/* 100ms is the smallest time we'll allow the launcher to sleep */
|
||||
if (nap->tv_sec <= 0 && nap->tv_usec <= 100000)
|
||||
/* The smallest time we'll allow the launcher to sleep. */
|
||||
if (nap->tv_sec <= 0 && nap->tv_usec <= MIN_AUTOVAC_SLEEPTIME * 1000)
|
||||
{
|
||||
nap->tv_sec = 0;
|
||||
nap->tv_usec = 100000; /* 100 ms */
|
||||
nap->tv_usec = MIN_AUTOVAC_SLEEPTIME * 1000;
|
||||
}
|
||||
}
|
||||
|
||||
@ -997,8 +999,17 @@ rebuild_database_list(Oid newdb)
|
||||
/* sort the array */
|
||||
qsort(dbary, nelems, sizeof(avl_dbase), db_comparator);
|
||||
|
||||
/* this is the time interval between databases in the schedule */
|
||||
/*
|
||||
* Determine the time interval between databases in the schedule.
|
||||
* If we see that the configured naptime would take us to sleep times
|
||||
* lower than our min sleep time (which launcher_determine_sleep is
|
||||
* coded not to allow), silently use a larger naptime (but don't touch
|
||||
* the GUC variable).
|
||||
*/
|
||||
millis_increment = 1000.0 * autovacuum_naptime / nelems;
|
||||
if (millis_increment <= MIN_AUTOVAC_SLEEPTIME)
|
||||
millis_increment = MIN_AUTOVAC_SLEEPTIME * 1.1;
|
||||
|
||||
current_time = GetCurrentTimestamp();
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user