Re: POC: Parallel processing of indexes in autovacuum - Mailing list pgsql-hackers

From Masahiko Sawada
Subject Re: POC: Parallel processing of indexes in autovacuum
Date
Msg-id CAD21AoAm806fQhMH49T_Ft9z1HSAdTi=gRcoxS9DW+nVQ9iCMQ@mail.gmail.com
Whole thread
In response to Re: POC: Parallel processing of indexes in autovacuum  (Daniil Davydov <3danissimo@gmail.com>)
Responses Re: POC: Parallel processing of indexes in autovacuum
List pgsql-hackers
On Wed, Apr 1, 2026 at 2:24 PM Daniil Davydov <3danissimo@gmail.com> wrote:
>
> Hi,
>
> On Wed, Apr 1, 2026 at 7:10 PM Alexander Korotkov <aekorotkov@gmail.com> wrote:
> >
> > Thank you for your work on this subject!  I've some notes about the patch.
> >
>
> Thank you very much for the review!
>
> > 1) The changes in guc.c allows autovacuum parallel leader to accept
> > changes in not just cost-based GUCs, but any GUCs.  That should be no
> > problem, because parallel workers have their own copies of GUC
> > variables, but I think this worth comment.
>
> OK, I will clarify it in the code.
>
> > 2) Maximum value for autovacuum_parallel_workers reloption is defined
> > as literally 1024, while max value for autovacuum_max_parallel_workers
> > is defined as MAX_PARALLEL_WORKER_LIMIT (also 1024).  Should we define
> > max value for reloption as MAX_PARALLEL_WORKER_LIMIT as well?
>
> I agree.
>
> > 3) Some paragraphs were moved from vacuum.sgml to maintenance.sgml.
> > It particular it references <replaceable
> > class="parameter">integer</replaceable, which is related to PARALLEL
> > option syntax: (PARALLEL integer).  Now it becoming unclear and needs
> > to be revised.
>
> Good catch! You are right.
>
> > 4) I also think  maintenance.sgml should mention the new reloption.
>
> Do you mean that we should mention it in the "parallel-vacuum" chapter? If so,
> I think that we should also mention that max_parallel_maintenance_workers can
> affect the parallel degree of manual VACUUM command. Yes, we have already
> written about this in the description of the PARALLEL option. But now the
> "vacuum-parallel" chapter doesn't mention limiting by GUC for manual VACUUM and
> limiting by reloption for autovacuum. IMHO it is better to have redundancy than
> an incomplete description.
>
> > 5) I think it worth having a test which check that setting
> > autovacuum_parallel_workers to 0 disables the parallel autovacuum for
> > given table.
>
> I see that VACUUM (PARALLEL) doesn't have such a test. Both manual VACUUM and
> autovacuum have similar logic with parallelism disabling. Is the increase in
> test completion time really worth checking these logic? I don't mind adding a
> new test, actually. Just want to make sure that this is necessary.
>
> > 6) Minor grammar issue in PVSharedCostParams comment, it must be
> > "vacuum workers compare" (plural subject).
>
> Yep, I'll fix it.
>
>
> Please, see an updated patch.

Thank you for updating the patch! I found a bug in the following code:

@@ -457,6 +534,9 @@ parallel_vacuum_end(ParallelVacuumState *pvs,
IndexBulkDeleteResult **istats)
  DestroyParallelContext(pvs->pcxt);
  ExitParallelMode();

+ if (AmAutoVacuumWorkerProcess())
+ pv_shared_cost_params = NULL;
+

If an autovacuum worker raises an error during parallel vacuum, it
doesn't pv_shared_cost_params. Then, if it doesn't use parallel vacuum
on the next table to vacuum, it would end up with SEGV as it attempts
to propagate the vacuum delay parameters.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com



pgsql-hackers by date:

Previous
From: Andrew Jackson
Date:
Subject: Re: Add ldapservice connection parameter
Next
From: Andres Freund
Date:
Subject: Re: AIO / read stream heuristics adjustments for index prefetching