Hello,

Thank you for sharing the files. I assume the intermediate costs were
included, as the cost is updated on each step for many nodes.
So in step 89, #197-BindableJoin has a CPU cost of 6.787504586323E12, and
that cost gets updated to 5.6541574E7 in step 90.
However, its parent subset#170 does not get updated, contrary to the
subsets on the path from the new node in step 90, #318. (See [1], [2])
It seems that there's indeed a problem with updating the costs in that
scenario.

Could you debug VolcanoPlanner.propagateCostImprovements(RelNode) for step
90, to see why the propagation does not apply to subset#170?

[1]
https://raw.githack.com/thomasrebele/calcite-relsubset-foo/main/job_query_26b/planner-viz/planner-vizrule-match-viz.html?step=89&dir=0
[2]
https://raw.githack.com/thomasrebele/calcite-relsubset-foo/main/job_query_26b/planner-viz/planner-vizrule-match-viz.html?step=90&dir=0

Cordialement / Best Regards,
*Dr. Thomas Rebele* | R&D Developer | Germany | *E* *treb...@tibco.com
<treb...@tibco.com>* | *W* *www.cloud.com <http://www.cloud.com/>*

*Cloud SG Germany GmbH* |  ℅ Citrix Systems GmbH, Erika-Mann-Straße 67-69,
80636 München Deutschland | Registergericht: Amtsgericht München, HRB
123355 | Geschäftsführer: Antonio Gomes, Oliver Ebel, Ganesh Vaidyanathan,
Brian Lee Shytle



On Wed, Jan 24, 2024 at 9:51 PM Tony Fiedler <
tony.fied...@mailbox.tu-dresden.de> wrote:

> Hello,
>
> Right, I guess I understand what the color encoding means. Thanks for
> confirming my thoughts.
>
> >> If I remember correctly, the cost for a subset shown at a step should be
> >> the same as the best cost of all children for that particular step.
>
> Right and this is what confuses me since this doesn't always be to seem
> the case -- for simple queries this seem to work perfectly fine.
>
> >> It would be helpful to share at least the generated files (especially
> the
> >> .js), to understand what's going on.
>
> Makes total sense.. There you go [1]. But be warned, the operator tree
> is rather big since I throw the Join Order Benchmark queries [2] from
> Leis et al. *How Good Are Query Optimizers, Really?* against it. Those
> contain many (10+) join operations. In this case the tree originates
> from query 26b. Unfortunately, I wasn't able to reproduce this cost
> calculation behaviour for less complex queries.
>
> [1]:
>
> https://github.com/AES-256-GCM/calcite-relsubset-foo/tree/main/job_query_26b/planner-viz
> [2]: http://www-db.in.tum.de/~leis/qo/job.tgz
>
> Kind regards,
> Tony
>
> On 2024/01/16 16:49:13 Thomas Rebele wrote:
> > Hello,
> >
> > The RuleMatchVisualizer uses the planner to get the cost [1], and the
> > Volcano planner uses the bestCost attribute for RelSubset [2].
> >
> > The color depends on the steps:
> > * For intermediate steps, the purple color shows which nodes have been
> > matched by the rule. Light blue shows added nodes.
> > * For the final step, the purple and light blue colors show the chosen
> > nodes of the final plan. Light blue for the RelSubset nodes.
> >
> > If I remember correctly, the cost for a subset shown at a step should be
> > the same as the best cost of all children for that particular step.
> >
> > It would be helpful to share at least the generated files (especially the
> > .js), to understand what's going on.
> >
> > [1]
> >
> https://github.com/apache/calcite/blob/c4042a34ef054b89cec1c47fefcbc8689bad55be/core/src/main/java/org/apache/calcite/plan/visualizer/RuleMatchVisualizer.java#L300C34-L300C34
> > [2]
> >
> https://github.com/apache/calcite/blob/c4042a34ef054b89cec1c47fefcbc8689bad55be/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java#L722
> >
> > Cordialement / Best Regards,
> > *Dr. Thomas Rebele* | R&D Developer | Germany | *E* *treb...@tibco.com
> > <tr...@tibco.com>* | *W* *www.cloud.com <http://www.cloud.com/>*
> >
> > *Cloud SG Germany GmbH* |  ℅ Citrix Systems GmbH, Erika-Mann-Straße
> 67-69,
> > 80636 München Deutschland | Registergericht: Amtsgericht München, HRB
> > 123355 | Geschäftsführer: Antonio Gomes, Alexander E. Kolar, Ganesh
> > Vaidyanathan, Brian Lee Shytle
> >
> >
> >
> > On Fri, Jan 12, 2024 at 11:35 PM Tony Fiedler <
> > tony.fied...@mailbox.tu-dresden.de> wrote:
> >
> > > Dear Calcite devs,
> > >
> > > First of all I really appreciate having a mature framework like
> Calcite.
> > > Please continue your great work on this project!
> > >
> > > My use case is feeding Calcite (v1.35.0) with an SQL query and doing
> > > some optimizations by providing metadata and selected planner rules. I
> > > initialize the Volcano planner and convert the logical plan resulting
> > > from the sql to a physical plan (using bindable convention).
> > > After the optimization, I convert the physical plan back to sql --
> > > hoping its execution time is faster (running the query by a PostgreSQL
> > > server) than the original query.
> > >
> > > There are some aspects I don't understand regarding both the cost
> > > calculation and cost propagation of (Rel) Subsets in the tree-based
> plan
> > > representation generated by RuleMatchVisualizer.
> > >
> > > AFAIK Subsets don't have any costs [1], so I'm really confused why
> > > (cumulative) `cpu` is higher in the subset than it is in its child
> > > elements (BindableJoin and BindableFilter), see [2]. In addition to
> that
> > > the cost metric `rows` is smaller(!) than the values provided by the
> > > children.
> > >
> > > What I expect is that Subset has exactly the same `rows`, `cpu` (and
> > > `io`) of the selected (purple) child element.
> > > Having a look at this sub tree [3] the cost propagation works like
> > > expected.
> > >
> > > Besides that I already noticed that Calcite costs seem to have an upper
> > > bound (9.223372036854775807E18) where costs can't get any higher in sub
> > > trees where this value is reached in an (physical operator) element.
> > >
> > > I know it's hard to tell what Calcite actually does just using
> > > screenshots. Please let me know if I should provide e.g., my code for
> > > giving better insights.
> > >
> > > Thank you in advance for your reply!
> > >
> > > [1]:
> > >
> > >
> https://github.com/apache/calcite/blob/c4042a34ef054b89cec1c47fefcbc8689bad55be/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java#L254
> > > [2]: https://ibb.co/7jtXKH3
> > > [3]: https://ibb.co/5BZZyLz
> > >
> > > Best regards,
> > > Tony
> > >
> >
>

Reply via email to