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


Reply via email to