| From: | Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> |
|---|---|
| To: | Daniil Davydov <3danissimo(at)gmail(dot)com> |
| Cc: | Alexander Korotkov <aekorotkov(at)gmail(dot)com>, SATYANARAYANA NARLAPURAM <satyanarlapuram(at)gmail(dot)com>, Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>, Sami Imseih <samimseih(at)gmail(dot)com>, Matheus Alcantara <matheusssilv97(at)gmail(dot)com>, Maxim Orlov <orlovmg(at)gmail(dot)com>, Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: POC: Parallel processing of indexes in autovacuum |
| Date: | 2026-04-02 23:00:11 |
| Message-ID: | CAD21AoA_eRa9nVCenw3tnVwUCgR-Jk4=W4GuV36+oYKgBmRwNA@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Thu, Apr 2, 2026 at 8:10 AM Daniil Davydov <3danissimo(at)gmail(dot)com> wrote:
>
> Hi,
>
> On Thu, Apr 2, 2026 at 6:16 AM Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> wrote:
> >
> > 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.
>
> Ouch. Indeed, I did not foresee this.
> Thank you for noticing it!
>
> I think we should add some cleanup for autovacuum near the ParallelContext
> cleanup, since they are interconnected. I also want to return our tests that
> are triggering ERROR/PANIC in the leader worker in order to check whether all
> resources are released. I hope I will be able to get to that by tomorrow
> evening.
I think that the beginning of vacuum loop (in PG_TRY() block in
vacuum()) seems better place as we're resetting vacuum delay
parameters:
in_vacuum = true;
VacuumFailsafeActive = false;
VacuumUpdateCosts();
VacuumCostBalance = 0;
VacuumCostBalanceLocal = 0;
VacuumSharedCostBalance = NULL;
VacuumActiveNWorkers = NULL;
Regards,
--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Lukas Fittl | 2026-04-02 23:16:13 | Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc? |
| Previous Message | Tom Lane | 2026-04-02 22:50:50 | Re: pg_waldump: support decoding of WAL inside tarfile |