On Fri, Dec 13, 2019 at 10:03 AM Masahiko Sawada <masahiko.saw...@2ndquadrant.com> wrote: > > Sorry for the late reply. > > On Fri, 6 Dec 2019 at 14:20, Amit Kapila <amit.kapil...@gmail.com> wrote: > > > > > > > > Here, we have a need to reduce the number of workers. Index Vacuum > > > > has two different phases (index vacuum and index cleanup) which uses > > > > the same parallel-context/DSM but both could have different > > > > requirements for workers. The second phase (cleanup) would normally > > > > need fewer workers as if the work is done in the first phase, second > > > > wouldn't need it, but we have exceptions like gin indexes where we > > > > need it for the second phase as well because it takes the pass > > > > over-index again even if we have cleaned the index in the first phase. > > > > Now, consider the case where we have 3 btree indexes and 2 gin > > > > indexes, we would need 5 workers for index vacuum phase and 2 workers > > > > for index cleanup phase. There are other cases too. > > > > > > > > We also considered to have a separate DSM for each phase, but that > > > > appeared to have overhead without much benefit. > > > > > > How about adding an additional argument to ReinitializeParallelDSM() > > > that allows the number of workers to be reduced? That seems like it > > > would be less confusing than what you have now, and would involve > > > modify code in a lot fewer places. > > > > > > > Yeah, we can do that. We can maintain some information in > > LVParallelState which indicates whether we need to reinitialize the > > DSM before launching workers. Sawada-San, do you see any problem with > > this idea? > > I think the number of workers could be increased in cleanup phase. For > example, if we have 1 brin index and 2 gin indexes then in bulkdelete > phase we need only 1 worker but in cleanup we need 2 workers. >
I think it shouldn't be more than the number with which we have created a parallel context, no? If that is the case, then I think it should be fine. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com