添加条件使MDX查询变慢(olap4j)

时间:2015-11-11 22:09:32

标签: performance mdx mondrian olap4j

我在Java Web应用程序中使用 MONDRIAN 服务器和 OLAP4j API,在添加接近查询的位置时出现性能问题。 MDX查询如:

SELECT 
   CrossJoin(
     {[Product.ProductHierarchie].[AllProduct]}
   , {[Measures].[Quantity]}
   ) ON COLUMNS,
   [Client.ClientHierarchie].[AllClient].Children ON ROWS
FROM [sales_data_cube]

0.3秒即可完成。但是在添加where子句时,比如
WHERE ([Period].&[start_period]:[Period].&[end_period])
为了获得开始/结束时段之间的销售,查询需要超过 250秒,并带有一个小事实表(8500行)。

我应该怎样做才能有更好的表现?

应用程序在内存限制= 8GB的tomcat服务器上运行,数据库服务器:MySQL 5.6.17

1 个答案:

答案 0 :(得分:2)

最后,问题在于蒙德里安的配置。 Mondrian使用日志包(log4j),每次在使用where条件时比较两个对象时实际调用' Debug' -method。

解决方案是更改log4j配置并停止' Debug' -mod。我在创建OLAP Connection之前添加了这个简单的代码来设置log4j:

Logger.getRootLogger().setLevel(Level.OFF);
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
Connection connolap = ...

more details about this issue (Mondrian Slow MDX Query)