添加 where 条件使 MDX 查询变慢 (olap4j)
add where condition make MDX query slow (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])
,
要获得 start/end 期间之间的销售额,查询需要超过 250 秒 和一个小事实 table(8500 行)。
我应该怎么做才能获得更好的表现?
应用程序 运行 在内存限制 = 8GB 的 tomcat 服务器上,数据库服务器:MySQL 5.6.17
最后,问题出在蒙德里安的配置上。
Mondrian 使用日志包 (log4j),每次使用 where 条件比较两个对象时,实际上都会调用 'Debug' 方法。
解决方案是更改 log4j 配置并停止 'Debug'-mod。在创建 OLAP 连接之前,我添加了这个简单的代码来设置 log4j:
Logger.getRootLogger().setLevel(Level.OFF);
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
Connection connolap = ...
我在 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])
,
要获得 start/end 期间之间的销售额,查询需要超过 250 秒 和一个小事实 table(8500 行)。
我应该怎么做才能获得更好的表现?
应用程序 运行 在内存限制 = 8GB 的 tomcat 服务器上,数据库服务器:MySQL 5.6.17
最后,问题出在蒙德里安的配置上。 Mondrian 使用日志包 (log4j),每次使用 where 条件比较两个对象时,实际上都会调用 'Debug' 方法。
解决方案是更改 log4j 配置并停止 'Debug'-mod。在创建 OLAP 连接之前,我添加了这个简单的代码来设置 log4j:
Logger.getRootLogger().setLevel(Level.OFF);
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Class.forName("mondrian.olap4j.MondrianOlap4jDriver");
Connection connolap = ...