Re: add_partial_path() may remove dominated path but still in use

Поиск
Список
Период
Сортировка
От Kohei KaiGai
Тема Re: add_partial_path() may remove dominated path but still in use
Дата
Msg-id CAOP8fzY1Oqf-LGdrZT+TAu+JajwPGn1uYnpWWUPL=2LiattjYA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: add_partial_path() may remove dominated path but still in use  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: add_partial_path() may remove dominated path but still in use  (Amit Kapila <amit.kapila16@gmail.com>)
Re: add_partial_path() may remove dominated path but still in use  (Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>)
Список pgsql-hackers
2018年12月30日(日) 4:12 Tom Lane <tgl@sss.pgh.pa.us>:
>
> Kohei KaiGai <kaigai@heterodb.com> writes:
> > 2018年12月29日(土) 1:44 Tom Lane <tgl@sss.pgh.pa.us>:
> >> However, first I'd like to know why this situation is arising in the first
> >> place.  To have the situation you're describing, we'd have to have
> >> attempted to make some Gather paths before we have all the partial paths
> >> for the relation they're for.  Why is that a good thing to do?  It seems
> >> like such Gathers are necessarily being made with incomplete information,
> >> and we'd be better off to fix things so that none are made till later.
>
> > Because of the hook location, Gather-node shall be constructed with built-in
> > and foreign partial scan node first, then extension gets a chance to add its
> > custom paths (partial and full).
> > At the set_rel_pathlist(), set_rel_pathlist_hook() is invoked next to the
> > generate_gather_paths().
>
> Hmm.  I'm inclined to think that we should have a separate hook
> in which extensions are allowed to add partial paths, and that
> set_rel_pathlist_hook should only be allowed to add regular paths.
>
I have almost same opinion, but the first hook does not need to be
dedicated for partial paths. As like set_foreign_pathlist() doing, we can
add both of partial and regular paths here, then generate_gather_paths()
may generate a Gather-path on top of the best partial-path.

On the other hands, the later hook must be dedicated to add regular paths,
and also provides a chance for extensions to manipulate pre-built path-list
including Gather-path.
As long as I know, pg_hint_plan uses the set_rel_pathlist_hook to enforce
a particular path-node, including Gather-node, by manipulation of the cost
value. Horiguchi-san, is it right?
Likely, this kind of extension needs to use the later hook.

I expect these hooks are located as follows:

set_rel_pathlist(...)
{
        :
    <snip>
        :
    /* for partial / regular paths */
    if (set_rel_pathlist_hook)
      (*set_rel_pathlist_hook) (root, rel, rti, rte);
    /* generate Gather-node */
    if (rel->reloptkind == RELOPT_BASEREL)
        generate_gather_paths(root, rel);
    /* for regular paths and manipulation */
    if (post_rel_pathlist_hook)
      (*post_rel_pathlist_hook) (root, rel, rti, rte);

    set_cheapest();
}

Thanks,
--
HeteroDB, Inc / The PG-Strom Project
KaiGai Kohei <kaigai@heterodb.com>


В списке pgsql-hackers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: Re: Using Btree to Provide Sorting on Suffix Keys with LIMIT
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Augment every test postgresql.conf