Re: [HACKERS] why not parallel seq scan for slow functions
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Cc: Robert Haas <robertmhaas@gmail.com>,
Marina Polyakova <m.polyakova@postgrespro.ru>, pgsql-hackers <pgsql-hackers@postgresql.org>,
Jeff Janes <jeff.janes@gmail.com>, Thomas Munro <thomas.munro@enterprisedb.com>,
Amit Khandekar <amitdkhan.pg@gmail.com>, Dilip Kumar <dilipbalaut@gmail.com>,
Michael Paquier <michael.paquier@gmail.com>
Date: 2018-03-11T12:19:08Z
Lists: pgsql-hackers
Attachments
- parallel_paths_include_tlist_cost_v9.patch (application/octet-stream) patch v9
On Thu, Feb 15, 2018 at 4:18 PM, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> wrote: > > After recent commits, the patch doesn't get applied cleanly, so rebased it and along the way addressed the comments raised by you. > Here are some comments on the patch. > > + /* > + * Except for the topmost scan/join rel, consider gathering > + * partial paths. We'll do the same for the topmost scan/join > This function only works on join relations. Mentioning scan rel is confusing. > Okay, removed the 'scan' word from the comment. > index 6e842f9..5206da7 100644 > --- a/src/backend/optimizer/path/allpaths.c > +++ b/src/backend/optimizer/path/allpaths.c > @@ -481,14 +481,21 @@ set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, > } > > + * > + * Also, if this is the topmost scan/join rel (that is, the only baserel), > + * we postpone this until the final scan/join targelist is available (see > > Mentioning join rel here is confusing since we deal with base relations here. > Okay, removed the 'join' word from the comment. > + bms_membership(root->all_baserels) != BMS_SINGLETON) > > set_tablesample_rel_pathlist() is also using this method to decide whether > there are any joins in the query. May be macro-ize this and use that macro at > these two places? > maybe, but I am not sure if it improves the readability. I am open to changing it if somebody else also feels it is better to macro-ize this usage. > - * for the specified relation. (Otherwise, add_partial_path might delete a > + * for the specified relation. (Otherwise, add_partial_path might delete a > > Unrelated change? > oops, removed. > + /* Add projection step if needed */ > + if (target && simple_gather_path->pathtarget != target) > > If the target was copied someplace, this test will fail. Probably we want to > check containts of the PathTarget structure? Right now copy_pathtarget() is not > called from many places and all those places modify the copied target. So this > isn't a problem. But we can't guarantee that in future. Similar comment for > gather_merge path creation. > I am not sure if there is any use of copying the path target unless you want to modify it , but anyway we use the check similar to what is used in patch in the multiple places in code. See create_ordered_paths. So, we need to change all those places first if we sense any such danger. > + simple_gather_path = apply_projection_to_path(root, > + rel, > + simple_gather_path, > + target); > + > > Why don't we incorporate those changes in create_gather_path() by passing it > the projection target instead of rel->reltarget? Similar comment for > gather_merge path creation. > Nothing important, just for the sake of code consistency, some other places in code uses it this way. See create_ordered_paths. Also, I am not sure if there is any advantage of doing it inside create_gather_path. > + /* > + * Except for the topmost scan/join rel, consider gathering > + * partial paths. We'll do the same for the topmost scan/join rel > > Mentioning scan rel is confusing here. > Okay, changed. > > deallocate tenk1_count; > +explain (costs off) select ten, costly_func(ten) from tenk1; > > verbose output will show that the parallel seq scan's targetlist has > costly_func() in it. Isn't that what we want to test here? > Not exactly, we want to just test whether the parallel plan is selected when the costly function is used in the target list. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com
Commits
-
Rewrite the code that applies scan/join targets to paths.
- 11cf92f6e2e1 11.0 landed
-
Teach create_projection_plan to omit projection where possible.
- d7c19e62a8e0 11.0 landed
-
Make the upper part of the planner work by generating and comparing Paths.
- 3fc6e2d7f5b6 9.6.0 cited