我在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
答案 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 = ...