> > But as far as code is concerned, I think the two-list approach will > turn out to be less simple if we derive corresponding two different > arrays in AppendState node. Handling two different arrays during > execution does not look clean. Whereas, the bitmapset that I have used > in Append has turned out to be very simple. I just had to do the below > check (and that is the only location) to see if it's a partial or > non-partial subplan. There is nowhere else any special handling for > non-partial subpath. > > /* > * Increment worker count for the chosen node, if at all we found one. > * For non-partial plans, set it to -1 instead, so that no other workers > * run it. > */ > if (min_whichplan != PA_INVALID_PLAN) > { > if (bms_is_member(min_whichplan, > ((Append*)state->ps.plan)->partial_subplans_set)) > padesc->pa_info[min_whichplan].pa_num_workers++; > else > padesc->pa_info[min_whichplan].pa_num_workers = -1; > } > > Now, since Bitmapset field is used during execution with such > simplicity, why not have this same data structure in AppendPath, and > re-use bitmapset field in Append plan node without making a copy of > it. Otherwise, if we have two lists in AppendPath, and a bitmap in > Append, again there is going to be code for data structure conversion. >
I think there is some merit in separating out non-parallel and parallel plans within the same array or outside it. The current logic to assign plan to a worker looks at all the plans, unnecessarily hopping over the un-parallel ones after they are given to a worker. If we separate those two, we can keep assigning new workers to the non-parallel plans first and then iterate over the parallel ones when a worker needs a plan to execute. We might eliminate the need for special value -1 for num workers. You may separate those two kinds in two different arrays or within the same array and remember the smallest index of a parallel plan. -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers