mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
Allow changing autovacuum_max_workers without restarting.
This commit introduces a new parameter named autovacuum_worker_slots that controls how many autovacuum worker slots to reserve during server startup. Modifying this new parameter's value does require a server restart, but it should typically be set to the upper bound of what you might realistically need to set autovacuum_max_workers. With that new parameter in place, autovacuum_max_workers can now be changed with a SIGHUP (e.g., pg_ctl reload). If autovacuum_max_workers is set higher than autovacuum_worker_slots, a WARNING is emitted, and the server will only start up to autovacuum_worker_slots workers at a given time. If autovacuum_max_workers is set to a value less than the number of currently-running autovacuum workers, the existing workers will continue running, but no new workers will be started until the number of running autovacuum workers drops below autovacuum_max_workers. Reviewed-by: Sami Imseih, Justin Pryzby, Robert Haas, Andres Freund, Yogesh Sharma Discussion: https://postgr.es/m/20240410212344.GA1824549%40nathanxps13
This commit is contained in:
@@ -150,7 +150,7 @@ ProcGlobalSemas(void)
|
||||
* So, now we grab enough semaphores to support the desired max number
|
||||
* of backends immediately at initialization --- if the sysadmin has set
|
||||
* MaxConnections, max_worker_processes, max_wal_senders, or
|
||||
* autovacuum_max_workers higher than his kernel will support, he'll
|
||||
* autovacuum_worker_slots higher than his kernel will support, he'll
|
||||
* find out sooner rather than later.
|
||||
*
|
||||
* Another reason for creating semaphores here is that the semaphore
|
||||
@@ -284,13 +284,13 @@ InitProcGlobal(void)
|
||||
dlist_push_tail(&ProcGlobal->freeProcs, &proc->links);
|
||||
proc->procgloballist = &ProcGlobal->freeProcs;
|
||||
}
|
||||
else if (i < MaxConnections + autovacuum_max_workers + NUM_SPECIAL_WORKER_PROCS)
|
||||
else if (i < MaxConnections + autovacuum_worker_slots + NUM_SPECIAL_WORKER_PROCS)
|
||||
{
|
||||
/* PGPROC for AV or special worker, add to autovacFreeProcs list */
|
||||
dlist_push_tail(&ProcGlobal->autovacFreeProcs, &proc->links);
|
||||
proc->procgloballist = &ProcGlobal->autovacFreeProcs;
|
||||
}
|
||||
else if (i < MaxConnections + autovacuum_max_workers + NUM_SPECIAL_WORKER_PROCS + max_worker_processes)
|
||||
else if (i < MaxConnections + autovacuum_worker_slots + NUM_SPECIAL_WORKER_PROCS + max_worker_processes)
|
||||
{
|
||||
/* PGPROC for bgworker, add to bgworkerFreeProcs list */
|
||||
dlist_push_tail(&ProcGlobal->bgworkerFreeProcs, &proc->links);
|
||||
|
||||
Reference in New Issue
Block a user