v28--v29-diff-for-0002.patch
text/x-patch
Filename: v28--v29-diff-for-0002.patch
Type: text/x-patch
Part: 5
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v28-0004
Subject: fixup for parallel autovacuum core
| File | + | − |
|---|---|---|
| src/backend/access/common/reloptions.c | 1 | 1 |
| src/backend/postmaster/autovacuum.c | 9 | 3 |
| src/backend/utils/misc/guc_parameters.dat | 2 | 2 |
| src/include/utils/rel.h | 4 | 3 |
From fae3dd1f6bd97acb626a85120bb09e2b18b76f98 Mon Sep 17 00:00:00 2001
From: Daniil Davidov <d.davydov@postgrespro.ru>
Date: Wed, 18 Mar 2026 15:03:31 +0700
Subject: [PATCH 4/9] fixup for parallel autovacuum core
---
src/backend/access/common/reloptions.c | 2 +-
src/backend/postmaster/autovacuum.c | 12 +++++++++---
src/backend/utils/misc/guc_parameters.dat | 4 ++--
src/include/utils/rel.h | 7 ++++---
4 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c
index 9459a010cc3..055585c38f3 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -242,7 +242,7 @@ static relopt_int intRelOpts[] =
RELOPT_KIND_HEAP,
ShareUpdateExclusiveLock
},
- -1, -1, 1024
+ 0, -1, 1024
},
{
{
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index f153d0343c8..ff57d8fca2a 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -2798,6 +2798,7 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
int multixact_freeze_table_age;
int log_vacuum_min_duration;
int log_analyze_min_duration;
+ int nparallel_workers = -1; /* disabled by default */
/*
* Calculate the vacuum cost parameters and the freeze ages. If there
@@ -2860,9 +2861,13 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
tab->at_params.truncate = VACOPTVALUE_UNSPECIFIED;
/* Decide whether we need to process indexes of table in parallel. */
- tab->at_params.nworkers = avopts
- ? avopts->autovacuum_parallel_workers
- : -1;
+ if (avopts)
+ {
+ if (avopts->autovacuum_parallel_workers > 0)
+ nparallel_workers = avopts->autovacuum_parallel_workers;
+ else if (avopts->autovacuum_parallel_workers == -1)
+ nparallel_workers = 0;
+ }
tab->at_params.freeze_min_age = freeze_min_age;
tab->at_params.freeze_table_age = freeze_table_age;
@@ -2872,6 +2877,7 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
tab->at_params.log_vacuum_min_duration = log_vacuum_min_duration;
tab->at_params.log_analyze_min_duration = log_analyze_min_duration;
tab->at_params.toast_parent = InvalidOid;
+ tab->at_params.nworkers = nparallel_workers;
/*
* Later, in vacuum_rel(), we check reloptions for any
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index 12393c1214b..9bd155e99f6 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -155,11 +155,11 @@
},
{ name => 'autovacuum_max_parallel_workers', type => 'int', context => 'PGC_SIGHUP', group => 'VACUUM_AUTOVACUUM',
- short_desc => 'Maximum number of parallel workers that a single autovacuum worker can take from bgworkers pool.',
+ short_desc => 'Maximum number of parallel processes per autovacuuming of one table.',
variable => 'autovacuum_max_parallel_workers',
boot_val => '2',
min => '0',
- max => 'MAX_BACKENDS',
+ max => 'MAX_PARALLEL_WORKER_LIMIT',
},
{ name => 'autovacuum_max_workers', type => 'int', context => 'PGC_SIGHUP', group => 'VACUUM_AUTOVACUUM',
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index 11dd3aebc6c..1981954008e 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -313,9 +313,10 @@ typedef struct AutoVacOpts
bool enabled;
/*
- * Target number of parallel autovacuum workers. -1 by default disables
- * parallel vacuum during autovacuum. 0 means choose the parallel degree
- * based on the number of indexes.
+ * Target number of parallel autovacuum workers. 0 by default disables
+ * parallel vacuum during autovacuum. -1 means choose the parallel degree
+ * based on the number of indexes (the autovacuum_max_parallel_workers
+ * parameter will be used as a limit).
*/
int autovacuum_parallel_workers;
--
2.43.0