我有一个应用程序收集性能指标并将它们存储在数据集市中。然后,我使用Mondrian对数据进行分析和临时探索。我每天收集约5e6行,METRIC表的总大小约为300M行。Mondrian w/Degenerate Dimensions的性能不佳
我们根据与SLA的度量指标比较来“数据”我们的数据。颜色有5个不同的值。当我们进行简单的MDX查询以获得特定日期范围(例如1天)的数据的颜色分布时,我们看到如下的查询:
2014-06-11 23:17:08,042从“METRIC”“METRIC”组中通过“METRIC”执行sql [选择“METRIC”。“COLOR”为“c0” )。 “COLOR”,以便通过 “公制” “COLOR” ASC NULLS LAST] 2014年6月11日23:17:58747 DEBUG [SQL] - 223:,EXEC 50704毫秒
为了提高性能,数据集市包括第四天的聚合表小时和天的级别,并且两个聚合表都包含COLOR列。
我知道Mondrian非常依赖底层数据库的性能,但实际上没有办法调整它。我可以在COLOR上创建一个索引(因为对索引的全面扫描比对表的完整扫描稍快),但在300M行表上创建具有5个不同值的索引似乎很愚蠢。日聚合表大约有500K行,并且对这个表执行几乎相同的查询的速度要快得多,但是Mondrian似乎总是转到基本事实表以查找这些维度查询。
我的问题是,有没有办法避免这个查询?如果我无法避免它,是否有可能让Mondrian使用这种查询类型的聚合表?我已在此维度/层次结构的单一级别中指定了approxRowCount,并且消除了类似查询以获取值的计数。我还没有挖掘到蒙德里安的来源,但还没有确定是否有可能使用聚合表,或者我的部分是否有一些配置阻止它。
编辑澄清:
我可能没有做询问我的一个很好的工作问题,让我尝试和澄清。我的MDX查询看起来是这样的:
select [Color].[Color].Members on columns,
{[Measures].[Metric Value], [Measures].[Count]} on rows
from [Metric]
where [Time].[2014].[June].[11]
我可以看看这和手工编写回答这个查询
select COLOR, avg(VALUE), sum(FACT_COUNT)
from AGG_DAY_METRIC
where YEAR = 2014
and MONTH = 6
and DAY_OF_MONTH = 11
group by COLOR
数据库回答这个查询在100ms左右扫描约4K行SQL查询。 Mondrian需要几分钟的时间来回答 查询,因为它有几个查询不直接回答MDX查询,而是获取有关 维度的信息。在上面的情况下,数据库必须扫描300M行,花费50秒,返回5个可能的颜色。如果颜色位于正常尺寸表中,则只有5行,但在退化维度中,可能有数百万行为100个。
所以我的问题是:
一)有没有办法告诉蒙德里安退化维度的价值和避免这些疑问?
b)有没有办法让Mondrian从聚合表中回答这些查询?
感谢您的回复。有一个度量计数(聚合类型'计数'),所有聚合表都具有FACT_COUNT列,所有聚合表包含COLOR退化维度值。我也试图澄清我的问题。 – sceaj