[Mondrian] Performance issue with large number of measures in Mondrian 3.0.4

Peter Tran ptran at prospricing.com
Thu Aug 20 13:34:03 EDT 2009


Hi,

Has anyone noticed a performance issue with Mondrian 3.0.4 with regards to large number of measures in a calculated measure?

We ran some test and got the following results.  We added one base measure at a time to the calculated measure for the test.

# measures     elapsed time
    9             19.078
   10             34.307
   11             79.096
   12            146.222
   13            304.365

[cid:image003.png at 01CA2191.A8B61440]


It looks like it's working inside some recursive code.  Any help or recommendation would be greatly appreciated.

Stack trace:
java.util.HashMap.put(HashMap.java:372)
java.util.HashSet.add(HashSet.java:200)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.process(CrossJoinFunDef.java:2089)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2070)
mondrian.mdx.MemberExpr.accept(MemberExpr.java:73)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.process(CrossJoinFunDef.java:2082)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2070)
mondrian.mdx.MemberExpr.accept(MemberExpr.java:73)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.process(CrossJoinFunDef.java:2082)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2070)
mondrian.mdx.MemberExpr.accept(MemberExpr.java:73)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.process(CrossJoinFunDef.java:2082)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2070)
mondrian.mdx.MemberExpr.accept(MemberExpr.java:73)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.process(CrossJoinFunDef.java:2082)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2070)
mondrian.mdx.MemberExpr.accept(MemberExpr.java:73)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:157)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef$MeasureVisitor.visit(CrossJoinFunDef.java:2048)
mondrian.mdx.ResolvedFunCall.accept(ResolvedFunCall.java:154)
mondrian.olap.fun.CrossJoinFunDef.nonEmptyList(CrossJoinFunDef.java:2196)
mondrian.olap.fun.NonEmptyCrossJoinFunDef$1.evaluateList(NonEmptyCrossJoinFunDef.java:68)
mondrian.calc.impl.AbstractListCalc.evaluate(AbstractListCalc.java:67)
mondrian.rolap.RolapResult.evaluateExp(RolapResult.java:794)
mondrian.rolap.RolapResult.access$100(RolapResult.java:46)
mondrian.rolap.RolapResult$RolapResultEvaluatorRoot.evaluateNamedSet(RolapResult.java:1194)
mondrian.rolap.RolapEvaluator.evaluateNamedSet(RolapEvaluator.java:884)
mondrian.mdx.NamedSetExpr$1.evaluateList(NamedSetExpr.java:78)
mondrian.olap.fun.SetFunDef$ListSetCalc$2.evaluateVoid(SetFunDef.java:149)
mondrian.olap.fun.SetFunDef$ListSetCalc.evaluateList(SetFunDef.java:204)
mondrian.olap.fun.HierarchizeFunDef$1.evaluateList(HierarchizeFunDef.java:48)
mondrian.calc.impl.AbstractListCalc.evaluate(AbstractListCalc.java:67)
mondrian.rolap.RolapResult.executeAxis(RolapResult.java:694)
mondrian.rolap.RolapResult.evalLoad(RolapResult.java:557)
mondrian.rolap.RolapResult.loadMembers(RolapResult.java:532)
mondrian.rolap.RolapResult.<init>(RolapResult.java:254)
mondrian.rolap.RolapConnection.execute(RolapConnection.java:597)
mondrian.tui.CmdRunner.runQuery(CmdRunner.java:566)
mondrian.tui.CmdRunner.execute(CmdRunner.java:543)
mondrian.tui.CmdRunner.executeMdxCmd(CmdRunner.java:2243)
mondrian.tui.CmdRunner.commandLoop(CmdRunner.java:887)
mondrian.tui.CmdRunner.commandLoop(CmdRunner.java:750)
mondrian.tui.CmdRunner.main(CmdRunner.java:2397)

Thanks!
-Peter

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.pentaho.org/pipermail/mondrian/attachments/20090820/b656a801/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image003.png
Type: image/png
Size: 16955 bytes
Desc: image003.png
Url : http://lists.pentaho.org/pipermail/mondrian/attachments/20090820/b656a801/attachment.png 


More information about the Mondrian mailing list