[
https://issues.apache.org/jira/browse/CALCITE-4578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jiatao Tao updated CALCITE-4578:
--------------------------------
Description:
Example like that: insert xxx VALUES (1, 'one'), (2, 'two'), (3,
'three')...(10000, 'ten thousand');
It generates a Union node with 10000 inputs, and the performance is poor,
here's the profile:
!image-2021-04-11-17-42-38-595.png|width=1086,height=240!
We create a program(HepProgram) to do the union merge, in this case, we only
have one union, so the rule is not fired, but it will still build the
buildFinalPlan, and AbstractRelNode#explain has performance issue in this
case(see the flame graph):
{code:java}
public RelNode findBestExp() {
assert root != null;
executeProgram(mainProgram);
// Get rid of everything except what's in the final plan.
collectGarbage();
return buildFinalPlan(root);
}
{code}
And the union has large inputs, so the performance is poor(in
SetOp#replaceInput, we have to recomputeDigest ), we can skip buildFinalPlan if
there's no rule fired.
was:
Example like that: insert xxx VALUES (1, 'one'), (2, 'two'), (3,
'three')...(10000, 'ten thousand');
It generates a Union node with 10000 inputs, and the performance is poor,
here's the profile:
!image-2021-04-11-17-42-38-595.png|width=1086,height=240!
We create a program(HepProgram) to do the union merge, in this case, we only
have one union, so the rule is not applied, but it will still build the
buildFinalPlan:
{code:java}
public RelNode findBestExp() {
assert root != null;
executeProgram(mainProgram);
// Get rid of everything except what's in the final plan.
collectGarbage();
return buildFinalPlan(root);
}
{code}
And the union have large inputs, so the performance is poor(in
SetOp#replaceInput, we have to recomputeDigest ), we can skip buildFinalPlan if
the inputs are not changed
> skip HepPlanner#buildFinalPlan when there's no rule fired in the program
> ------------------------------------------------------------------------
>
> Key: CALCITE-4578
> URL: https://issues.apache.org/jira/browse/CALCITE-4578
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Jiatao Tao
> Assignee: Jiatao Tao
> Priority: Major
> Attachments: image-2021-04-11-17-42-38-595.png
>
>
> Example like that: insert xxx VALUES (1, 'one'), (2, 'two'), (3,
> 'three')...(10000, 'ten thousand');
> It generates a Union node with 10000 inputs, and the performance is poor,
> here's the profile:
> !image-2021-04-11-17-42-38-595.png|width=1086,height=240!
> We create a program(HepProgram) to do the union merge, in this case, we only
> have one union, so the rule is not fired, but it will still build the
> buildFinalPlan, and AbstractRelNode#explain has performance issue in this
> case(see the flame graph):
> {code:java}
> public RelNode findBestExp() {
> assert root != null;
> executeProgram(mainProgram);
> // Get rid of everything except what's in the final plan.
> collectGarbage();
> return buildFinalPlan(root);
> }
> {code}
> And the union has large inputs, so the performance is poor(in
> SetOp#replaceInput, we have to recomputeDigest ), we can skip buildFinalPlan
> if there's no rule fired.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)