> -----Original Message-----
> From: pgsql-hackers-ow...@postgresql.org
> [mailto:pgsql-hackers-ow...@postgresql.org] On Behalf Of Kouhei Kaigai
> Sent: Monday, September 05, 2016 12:58 PM
> To: Jeevan Chalke
> Cc: pgsql-hackers@postgresql.org; Etsuro Fujita
> Subject: Re: [HACKERS] PassDownLimitBound for ForeignScan/CustomScan
> 
> > On Mon, Aug 29, 2016 at 7:25 AM, Kouhei Kaigai <kai...@ak.jp.nec.com> wrote:
> >
> >
> >     Hello,
> >
> >     The attached patch adds an optional callback to support special 
> > optimization
> >     if ForeignScan/CustomScan are located under the Limit node in plan-tree.
> >
> >     Our sort node wisely switches the behavior when we can preliminary know
> >     exact number of rows to be produced, because all the Sort node has to
> >     return is the top-k rows when it is located under the Limit node.
> >     It is much lightweight workloads than sorting of entire input rows when
> >     nrows is not small.
> >
> >     In my case, this information is very useful because GPU can complete its
> >     sorting operations mostly on L1-grade memory if we can preliminary know
> >     the top-k value is enough small and fits to size of the fast memory.
> >
> >     Probably, it is also valuable for Fujita-san's case because this 
> > information
> >     allows to attach "LIMIT k" clause on the remote query of postgres_fdw.
> >     It will reduce amount of the network traffic and remote CPU consumption
> >     once we got support of sort pushdown.
> >
> >
> >
> >     One thing we need to pay attention is cost estimation on the planner 
> > stage.
> >     In the existing code, only create_ordered_paths() and
> > create_merge_append_path()
> >     considers the limit clause for cost estimation of sorting. They use the
> >     'limit_tuples' of PlannerInfo; we can reference the structure when 
> > extension
> >     adds ForeignPath/CustomPath, so I think we don't need a special 
> > enhancement
> >     on the planner stage.
> >
> Thanks for your comments.
> 
> > I believe this hook is gets called at execution time.
> > So to push LIMIT clause like you said above we should use "limit_tuples" at 
> > the time
> > of planning and then use this hook to optimize at runtime, right?
> >
> Yes. For more correctness, a valid "limit_tuples" of PlannerInfo is set only 
> when
> LIMIT clause takes constant values; it is true for most of use case.
> Then, the hook I added shall be called at execution time for more exact 
> optimization.
> 
> If FDW/CSP cannot accept uncertain number of rows to generate on planning 
> time,
> it is not a duty to provide its own path which is optimized for small number 
> of
> LIMIT clause.
> 
> > Apart from that, attached patch applies cleanly on latest sources and found 
> > no issues
> > with make or with regressions.
> >
> > However this patch is an infrastructure for any possible optimization when
> > foreign/customscan is under LIMIT.
> >
> > So look good to me.
> >
> > I quickly tried adding a hook support in postgres_fdw, and it gets called 
> > correctly
> > when we have foreignscan with LIMIT (limit being evaluated on local server).
> >
> > So code wise no issue. Also add this hook details in documentation.
> >
> OK, I'll try to write up some detailed documentation stuff; not only API 
> specification.
>
The v2 patch attached. It introduces the role of this hook and how extension
utilizes the LIMIT clause for its further optimization on planning and
execution time.

Thanks,
--
NEC Business Creation Division / PG-Strom Project
KaiGai Kohei <kai...@ak.jp.nec.com>

Attachment: pgsql-v10-fdw-css-limit-bound.v2.patch
Description: pgsql-v10-fdw-css-limit-bound.v2.patch

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to