Re: [HACKERS] Block level parallel vacuum - Mailing list pgsql-hackers
From | Mahendra Singh |
---|---|
Subject | Re: [HACKERS] Block level parallel vacuum |
Date | |
Msg-id | CAKYtNAroTFkoAhjGTeRnPb8NpLyLc7syqOH+dyP4nfj8kbaWfQ@mail.gmail.com Whole thread Raw |
In response to | Re: [HACKERS] Block level parallel vacuum (Masahiko Sawada <masahiko.sawada@2ndquadrant.com>) |
Responses |
Re: [HACKERS] Block level parallel vacuum
|
List | pgsql-hackers |
On Wed, 27 Nov 2019 at 23:14, Masahiko Sawada <masahiko.sawada@2ndquadrant.com> wrote:
On Wed, 27 Nov 2019 at 13:26, Amit Kapila <amit.kapila16@gmail.com> wrote:
>
> On Wed, Nov 27, 2019 at 8:14 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
> >
> > On Wed, Nov 27, 2019 at 12:52 AM Masahiko Sawada
> > <masahiko.sawada@2ndquadrant.com> wrote:
> > >
> > >
> > > I've incorporated the comments I got so far including the above and
> > > the memory alignment issue.
> > >
> >
> > Thanks, I will look into the new version.
> >
>
> Few comments:
> -----------------------
> 1.
> +static void
> +vacuum_or_cleanup_indexes_worker(Relation *Irel, int nindexes,
> + IndexBulkDeleteResult **stats,
> + LVShared *lvshared,
> + LVDeadTuples *dead_tuples)
> +{
> + /* Increment the active worker count */
> + pg_atomic_add_fetch_u32(VacuumActiveNWorkers, 1);
>
> The above code is wrong because it is possible that this function is
> called even when there are no workers in which case
> VacuumActiveNWorkers will be NULL.
>
> 2.
> + /* Take over the shared balance value to heap scan */
> + VacuumCostBalance = pg_atomic_read_u32(VacuumSharedCostBalance);
>
> We can carry over shared balance only if the same is active.
>
> 3.
> + if (Irel[i]->rd_indam->amparallelvacuumoptions ==
> + VACUUM_OPTION_NO_PARALLEL)
> + {
> +
> /* Set NULL as this index does not support parallel vacuum */
> + lvshared->bitmap[i >> 3] |= 0 << (i & 0x07);
>
> Can we avoid setting this for each index by initializing bitmap as all
> NULL's as is done in the attached patch?
>
> 4.
> + /*
> + * Variables to control parallel index vacuuming. Index statistics
> + * returned from ambulkdelete and amvacuumcleanup is nullable
> variable
> + * length. 'offset' is NULL bitmap. Note that a 0 indicates a null,
> + * while 1 indicates non-null. The index statistics follows
> at end of
> + * struct.
> + */
>
> This comment is not clear, so I have re-worded it. See, if the
> changed comment makes sense.
>
> I have fixed all the above issues, made a couple of other cosmetic
> changes and modified a few comments. See the changes in
> v34-0002-delta-amit. I am attaching just the delta patch on top of
> v34-0002-Add-parallel-option-to-VACUUM-command.
>
Thank you for reviewing this patch. All changes you made looks good to me.
I thought I already have posted all v34 patches but didn't, sorry. So
I've attached v35 patch set that incorporated your changes and it
includes Dilip's patch for gist index (0001). These patches can be
applied on top of the current HEAD and make check should pass.
Thanks for the re-based patches.
On the top of v35 patch, I can see one compilation warning.
parallel.c: In function ‘LaunchParallelWorkers’:
parallel.c:502:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
int i;
^
Above warning is due to one extra semicolon added at the end of declaration line in v35-0003 patch. Please fix this in next version.
+ int nworkers_to_launch = Min(nworkers, pcxt->nworkers);;
I will continue my testing on the top of v35 patch set and will post results.
Thanks and Regards
Mahendra Thalor
EnterpriseDB: http://www.enterprisedb.com
pgsql-hackers by date: