1

我在 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

4

1 回答 1

2

最后,问题出在蒙德里安的配置上。Mondrian 使用日志记录包 ( log4j ),其中每次在使用 where 条件时比较两个对象时实际调用“调试”方法。

解决方案是更改 log4j 配置并停止“调试”-mod。在创建 OLAP 连接之前,我添加了这个简单的代码来设置 log4j:

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

有关此问题的更多详细信息(蒙德里安慢 MDX 查询)

于 2015-11-24T16:01:51.813 回答