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

Peter Tran ptran at prospricing.com
Thu Aug 20 15:00:02 EDT 2009


I forgot to include the MDX.

WITH SET [WT_M] as '{{[Supply_Loc].[All].[5000]}}'
     SET [#DataSet#] as 'NonEmptyCrossjoin({[WT_M]}, {Descendants([Order_Date].[All], 1)})'
SELECT [Measures].[Target_Price6] on columns,
       NON EMPTY Hierarchize({[#DataSet#]}) on rows
FROM [Fuels_Transactions]
WHERE ([Sales_Org].[All].[ES01],
       [Dist_Chnl].[All].[05],
       [Division].[All].[01])

The return result is a very small data set.  The measure [Measures].[Target_Price6] is the 13 measures test below.

Axis #0:
{[Sales_Org].[All].[ES01], [Dist_Chnl].[All].[05], [Division].[All].[01]}
Axis #1:
{[Measures].[Target_Price6]}
Axis #2:
{[Supply_Loc].[All].[5000], [Order_Date].[All].[2009]}



From: Peter Tran
Sent: Thursday, August 20, 2009 12:34 PM
To: 'Mondrian developer mailing list'
Subject: Performance issue with large number of measures in Mondrian 3.0.4

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:image001.png at 01CA219E.7E615DA0]


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/81b837ce/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 16955 bytes
Desc: image001.png
Url : http://lists.pentaho.org/pipermail/mondrian/attachments/20090820/81b837ce/attachment.png 


More information about the Mondrian mailing list