Dear Calcite Development Team,
I am encountering a memory overflow issue when using Calcite. After
investigation, I found that a thread continuously holds on to an instance
of org.apache.calcite.plan.volcano.RuleQueue without releasing it.
Using jstack, I observed that the program repeatedly executes the following
stack trace:
at
org.apache.calcite.plan.volcano.VolcanoPlanner.getSubset(VolcanoPlanner.java:975)
at
org.apache.calcite.plan.volcano.RelSubset.getParentSubsets(RelSubset.java:220)
at
org.apache.calcite.plan.volcano.RelSubset.getParentSubsets(RelSubset.java:218)
This behavior seems to suggest a possible deadlock. Could this be related
to my use of a Calcite connection in a multi-threaded environment? I would
appreciate any insights or guidance you could provide regarding this issue.
Thank you for your support.
Best regards,
Jack han
"qtp1700973603-73" #73 prio=5 os_prio=0 tid=0x00007f7676179000 nid=0x36de3
runnable [0x00007f76035e8000]
java.lang.Thread.State: RUNNABLE
at
org.apache.calcite.plan.volcano.RelSubset.getParentSubsets(RelSubset.java:218)
at
org.apache.calcite.plan.volcano.RuleQueue.computeImportance(RuleQueue.java:393)
at
org.apache.calcite.plan.volcano.RuleQueue.recompute(RuleQueue.java:192)
at
org.apache.calcite.plan.volcano.RuleQueue.recompute(RuleQueue.java:205)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1604)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:859)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:879)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:1755)
at
org.apache.calcite.plan.volcano.VolcanoRuleCall.transformTo(VolcanoRuleCall.java:135)
at
org.apache.calcite.plan.RelOptRuleCall.transformTo(RelOptRuleCall.java:234)
at
org.apache.calcite.rel.rules.UnionMergeRule.onMatch(UnionMergeRule.java:140)
at
org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:212)
at
org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:646)
at
org.apache.calcite.tools.Programs.lambda$standard$3(Programs.java:298)
at
org.apache.calcite.tools.Programs$$Lambda$949/39179479.run(Unknown Source)
at
org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:358)
at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:188)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:319)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:772)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:636)
at
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:606)
at
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:229)
at
org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550)
- locked <0x00000006e9a2b340> (a
org.apache.calcite.jdbc.CalciteJdbc41Factory$CalciteJdbc41Statement)
at
org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:676)
at
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
at
org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:227)
at
com.meituan.waimairc.service.impl.QueryServiceImpl.query(QueryServiceImpl.java:141)