Re: allow changing autovacuum_max_workers without restarting
Justin Pryzby <pryzby@telsasoft.com>
From: Justin Pryzby <pryzby@telsasoft.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2024-04-15T13:33:33Z
Lists: pgsql-hackers
On Wed, Apr 10, 2024 at 04:23:44PM -0500, Nathan Bossart wrote: > The attached proof-of-concept patch demonstrates what I have in mind. > Instead of trying to dynamically change the global process table, etc., I'm > proposing that we introduce a new GUC that sets the effective maximum > number of autovacuum workers that can be started at any time. This means > there would be two GUCs for the number of autovacuum workers: one for the > number of slots reserved for autovacuum workers, and another that restricts > the number of those slots that can be used. The former would continue to > require a restart to change its value, and users would typically want to > set it relatively high. The latter could be changed at any time and would > allow for raising or lowering the maximum number of active autovacuum > workers, up to the limit set by the other parameter. > > The proof-of-concept patch keeps autovacuum_max_workers as the maximum > number of slots to reserve for workers, but I think we should instead > rename this parameter to something else and then reintroduce > autovacuum_max_workers as the new parameter that can be adjusted without > restarting. That way, autovacuum_max_workers continues to work much the > same way as in previous versions. When I thought about this, I considered proposing to add a new GUC for "autovacuum_policy_workers". autovacuum_max_workers would be the same as before, requiring a restart to change. The policy GUC would be the soft limit, changable at runtime up to the hard limit of autovacuum_max_workers (or maybe any policy value exceeding autovacuum_max_workers would be ignored). We'd probably change autovacuum_max_workers to default to a higher value (8, or 32 as in your patch), and have autovacuum_max_workers default to 3, for consistency with historic behavior. Maybe autovacuum_policy_workers=-1 would mean to use all workers. There's the existing idea to change autovacuum thresholds during the busy period of the day vs. off hours. This would allow something similar with nworkers rather than thresholds: if the goal were to reduce the resource use of vacuum, the admin could set max_workers=8, with policy_workers=2 during the busy period. -- Justin
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Give up on running with NetBSD/OpenBSD's default semaphore settings.
- 810a8b1c8051 18.0 landed
-
initdb: Do not report default autovacuum_worker_slots.
- 2b49492eda3f 18.0 landed
-
Lower default value of autovacuum_worker_slots in initdb as needed.
- 6d01541960e2 18.0 landed
-
Allow changing autovacuum_max_workers without restarting.
- c758119e5bfb 18.0 landed
-
Reserve a PGPROC slot and semaphore for the slotsync worker process.
- 2bdf1b2a2efc 18.0 cited
-
Make archiver process an auxiliary process.
- d75288fb27b8 14.0 cited
-
Correct the formulas for System V IPC parameters SEMMNI and SEMMNS in docs.
- 597f7e3a6ec3 9.6.0 cited