Hello Jack, your stack trace is about Calcite planner, which is unfortunately not multi-thread safe.
I guess any kind of issue can arise by using it in that way. Best regards, Alessandro On Thu, 22 May 2025 at 04:14, han jack <[email protected]> wrote: > 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) >
