[ https://issues.apache.org/jira/browse/CALCITE-4578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17325465#comment-17325465 ]
Haisheng Yuan commented on CALCITE-4578: ---------------------------------------- Hi [~Aron.tao], which version are you using? According to the flame graph, it is definitely the latest version. Since v1.24.0 (see CALCITE-3786), the digest recompute is almost no-op, just clear data. Can you try with 1.24.0 or later? > redundant 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)