1

Java Web アプリケーションでMONDRIANサーバーとOLAP4j API を使用しています。クエリの近くに where を追加するとパフォーマンスの問題が発生します。次のような 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])て 開始/終了期間間の売上を取得すると、小さなファクト テーブル (8500 行) でクエリに250 秒
以上かかります。

より良いパフォーマンスを得るにはどうすればよいですか?

アプリケーションは、メモリ制限 = 8GB、データベース サーバー: MySQL 5.6.17 の tomcat サーバーで実行されています。

4

1 に答える 1

2

最後に、問題はモンドリアンの構成にありました。Mondrian は、where 条件を使用して 2 つのオブジェクトを比較するたびに、実際に 'Debug' メソッドを呼び出すロギング パッケージ ( log4j ) を使用します。

解決策は、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 = ...

この問題の詳細 (Mondrian Slow MDX Query)

于 2015-11-24T16:01:51.813 に答える