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