Hi
> I think the advantage of the current approach is that once the parallel
> workers are launched, the leader can process indexes that don't support
> parallelism. So, both type of indexes can be processed at the same time.
In lazy_parallel_vacuum_or_cleanup_indexes I see:
/*
* Join as a parallel worker. The leader process alone does that in
* case where no workers launched.
*/
if (lps->leaderparticipates || lps->pcxt->nworkers_launched == 0)
vacuum_or_cleanup_indexes_worker(Irel, nindexes, stats,
lps->lvshared,
vacrelstats->dead_tuples);
/*
* Here, the indexes that had been skipped during parallel index
vacuuming
* are remaining. If there are such indexes the leader process does
vacuum
* or cleanup them one by one.
*/
vacuum_or_cleanup_skipped_indexes(vacrelstats, Irel, nindexes, stats,
lps);
So parallel leader will process parallel indexes first along with parallel
workers and skip non-parallel ones. Only after end of the index list parallel
leader will process non-parallel indexes one by one. In case of equal index
processing time parallel leader will process (count of parallel
indexes)/(nworkers+1) + all non-parallel, while parallel workers will process
(count of parallel indexes)/(nworkers+1). I am wrong here?
regards, Sergei